diff --git a/.claude/skills/new-post/SKILL.md b/.claude/skills/new-post/SKILL.md new file mode 100644 index 0000000..87319a8 --- /dev/null +++ b/.claude/skills/new-post/SKILL.md @@ -0,0 +1,102 @@ +--- +name: oxidar:new-post +description: Create a new blog post for the Oxidar.org website. Use this skill whenever the user wants to write, draft, create, or start a new post, article, entrada, publicación, or content for the Oxidar blog — even if they just say "write a post about X" or "quiero escribir sobre Y". Also drafts social media content (Twitter/X, LinkedIn, Bluesky, Telegram) for the post. +--- + +# New Post for Oxidar.org + +You are helping create a new Spanish-language blog post for Oxidar.org, the Latin American Rust community website. + +## What you need upfront + +The user should provide the **topic/title** of the post. If they haven't, ask for it before proceeding. + +## Step 1 — Create the file + +### Folder and filename + +Use this pattern: +``` +content/posts/YYYY.MM.DD-slug/slug.md +``` + +- Use today's date +- `slug` = short lowercase kebab-case derived from the topic (Spanish or English is fine, keep it short) +- The filename inside the folder matches the slug + +**Example**: topic "Cómo usar Axum" → `content/posts/2026.04.19-axum/axum.md` + +### Front matter (TOML) + +```toml ++++ +date = 'YYYY-MM-DDTHH:00:00-03:00' +draft = true +hiddenFromHomePage = false +title = 'Post title in Spanish' +description = "One-sentence SEO description in Spanish" +tags = ["rust", "relevant-tag"] +categories = ["CategoryName"] +translationKey = "slug" ++++ +``` + +**Notes:** +- Start as `draft = true` — the user will flip it when ready to publish +- `translationKey` = the slug (enables pairing with future `.en.md` translation) +- Pick tags from common ones: `rust`, `webassembly`, `wasm`, `tutorial`, `presentacion`, `hackathon`, `juegos`, or add new relevant ones +- Pick categories: `Proyectos`, `Eventos`, `Tutoriales`, `Comunidad`, `Hackathons` + +## Step 2 — Draft the content + +Write a solid first draft of the post body in **Spanish**. Structure it naturally for the topic — don't force headers if it doesn't need them. The tone is educational, collaborative, and community-focused, aimed at Latin American Rust developers of all levels. + +Good posts at Oxidar: +- Start with an engaging hook +- Explain *why* this matters to the Rust / LatAm community +- Include code snippets when relevant (use fenced code blocks with language hint) +- End with a call to action or community invitation + +## Step 3 — Draft social media content + +After the file is created, generate platform-specific posts **in Spanish** announcing the article. Tailor each to the platform's style and character limits: + +| Platform | Tone | Max length | Notes | +|----------|------|-----------|-------| +| Twitter/X | Punchy, hook-first | ~280 chars | Include relevant hashtags: #Rust #RustLang #RustES | +| LinkedIn | Professional, more context | ~600 chars | No hashtag overload, 2-3 max | +| Bluesky | Conversational, community feel | ~300 chars | Hashtags optional | +| Telegram | Warm, direct announcement | ~400 chars | Can use emoji, no hashtag needed | + +Present each draft in a labeled code block so the user can copy/edit easily: + +``` +### 🐦 Twitter/X +``` +[text here] +``` + +### 💼 LinkedIn +``` +[text here] +``` + +### 🦋 Bluesky +``` +[text here] +``` + +### 📢 Telegram +``` +[text here] +``` +``` + +Use a placeholder `[URL]` where the post URL should go — the user will have it once published. The URL pattern is `https://oxidar.org/slug/`. + +## Step 4 — Tell the user what's next + +Remind them: +1. The post is saved as `draft = true` — set to `false` when ready to publish +2. The auto-translation workflow will create `slug.en.md` automatically when they open a PR +3. The social media posts above can be used manually or will also be auto-generated by the `social-share` workflow on merge diff --git a/content/posts/2026.04.19-snakear-recap/snakear-recap.en.md b/content/posts/2026.04.19-snakear-recap/snakear-recap.en.md new file mode 100644 index 0000000..db42b50 --- /dev/null +++ b/content/posts/2026.04.19-snakear-recap/snakear-recap.en.md @@ -0,0 +1,80 @@ ++++ +date = '2026-04-19T12:00:00-03:00' +hiddenFromHomePage = false +title = "We did it! The Snakear Hackathon was a success" +description = "Chronicle of the Distributed Snake Challenge: over 40 Rustaceans gathered in Buenos Aires to hack, compete, and put a server to the test that didn’t go down even once." +tags = ["rust", "hackathon", "games", "community", "events"] +categories = ["Events", "Community", "Hackathons"] +translationKey = "snakear-recap" ++++ +The Oxidar community gathered at the Snakear Hackathon + +On April 11th, more than **40 rustaceans** met at Torres Catalinas, in the heart of Retiro, for a day that still brings smiles to our faces. With 113 registered participants, the **Distributed Snake Challenge** became the largest event by Oxidar.org to date — 30 in person, 10 connected online, and zero panics in production. + +## The challenge: your snake against the world + +The premise was simple and ruthless: connect to our shared server and build the most competitive Snake client possible using Rust. The board was the same for everyone. Ticks, global state, and latency were the enemies. + +Freedom was total — Bevy, SDL2, Ratatui, or a raw terminal. What mattered was how your snake survived in an environment where everyone wanted to eat the same apple. + +The shared board in action during the hackathon + +## The (controlled) chaos we didn’t expect + +The best part of the event wasn’t what we planned — it was what people improvised on the fly. + +Participants didn’t just compete: they **tried to hack the server**. They sent malformed requests, looked for exploits in the protocol, tested edge cases we hadn’t even imagined. The competitive atmosphere naturally evolved into something much more interesting: a network of creative adversaries trying to break the system’s rules. + +Participants fully engaged in hacking mode + +On our side, we found ourselves **improving the server in real time** to respond to their attacks. An attack-and-defense loop that kept the Oxidar team running all day. The result: the server held strong. No downtime. Not a single one. + +The Snake game with the leaderboard on screen + +## The winners + +### 🧠 Rust Quiz + + +The Rust quiz at noon had its own champion: **Gaby**, who proved that the *Book* alone is not enough — you really have to have suffered the borrow checker. + +The Rust quiz winners from Oxidar + +### 🏆 Hackathon + + +**ClaudIA** took first place in the hackathon with an implementation that stood out for analyzing other competitors’ strategies and using them to her advantage. + +The hackathon winners with prizes from Input Output + +Prizes awarded by TxPipe and Input Output Global + +One of the Oxidar.org T-shirts taken by the winners + +## The team that made it possible + +None of this would have happened without the effort of the people behind Oxidar.org, and the crucial support of our sponsors. + +The Oxidar.org team + +Hernan from Oxidar.org during the event + +The organizers presenting the challenge + +Thanks to **TxPipe** and **Input Output Global** for the prizes, the space, and believing in the Rust community in Latin America. Without their support, this wouldn’t exist. + +Hackathon presentation to the participants + +## What we took away + +Beyond the winners and the code, what we take away is this: a community that grows, learns together, and has fun breaking things in Rust. + +It was the most ambitious event we’ve organized, and it went well. That gives us energy to keep going. + +Enjoy all the [photos](https://iog.pixieset.com/iog/) from the event, thanks to our hosts! + +--- + +**Were you there? Tell us about your experience on our [Telegram](https://t.me/+7PgAQVPclxIzOGQ0) or write to us at [admin@oxidar.org](mailto:admin@oxidar.org).** + +**See you at the next hackathon!** 🦀 \ No newline at end of file diff --git a/content/posts/2026.04.19-snakear-recap/snakear-recap.md b/content/posts/2026.04.19-snakear-recap/snakear-recap.md new file mode 100644 index 0000000..03c9039 --- /dev/null +++ b/content/posts/2026.04.19-snakear-recap/snakear-recap.md @@ -0,0 +1,81 @@ ++++ +date = '2026-04-19T12:00:00-03:00' +hiddenFromHomePage = false +title = '¡Lo logramos! El Hackathon Snakear fue un éxito' +description = "Crónica del Distributed Snake Challenge: más de 40 rustáceos se juntaron en Buenos Aires para hackear, competir, y poner a prueba un servidor que no cayó ni una sola vez." +tags = ["rust", "hackathon", "juegos", "comunidad", "eventos"] +categories = ["Eventos", "Comunidad", "Hackathons"] +translationKey = "snakear-recap" ++++ + +La comunidad Oxidar reunida en el Hackathon Snakear + +El 11 de abril, más de **40 rustáceos** nos encontramos en Torres Catalinas, en el corazón de Retiro, para vivir una jornada que todavía nos genera sonrisas. Con 113 registrados, el **Distributed Snake Challenge** se convirtió en el evento más grande de Oxidar.org hasta el momento — 30 presenciales, 10 conectados en línea, y cero panics en producción. + +## El desafío: tu serpiente contra el mundo + +La premisa era simple y despiadada: conectarse a nuestro servidor compartido y construir el cliente de Snake más competitivo posible usando Rust. El tablero era el mismo para todos. Los ticks, el estado global, y la latencia eran el enemigo. + +La libertad era total — Bevy, SDL2, Ratatui, o una terminal cruda. Lo que importaba era cómo tu serpiente sobrevivía en un entorno donde todos querían comer la misma manzana. + +El tablero compartido en acción durante el hackathon + +## El caos (controlado) que no esperábamos + +Lo mejor del evento no fue lo que planeamos — fue lo que la gente inventó sobre la marcha. + +Los participantes no solo compitieron: **intentaron hackear el servidor**. Mandaron requests malformados, buscaron exploits en el protocolo, probaron condiciones de borde que nosotros ni habíamos imaginado. El ambiente competitivo derivó naturalmente en algo mucho más interesante: una red de adversarios creativos tratando de romper las reglas del sistema. + +Participantes en pleno modo hackeo + +Nosotros, del otro lado, nos encontramos **mejorando el servidor en tiempo real** para responder a sus ataques. Un loop de ataque y defensa que mantuvo al equipo de Oxidar corriendo todo el día. El resultado: el servidor aguantó todo. No hubo downtime. Ni uno solo. + +El Snake game con el leaderboard en pantalla + +## Los ganadores + +### 🧠 Quiz de Rust + + +El quiz de Rust del mediodía tuvo su propio campeón: **Gaby**, que demostró que el *Book* no alcanza — hay que haber sufrido el borrow checker de verdad. + +Los ganadores del Quiz de Oxidar + +### 🏆 Hackathon + + +**ClaudIA** se llevó el primer puesto del hackathon con una implementación que se destacó por analizar la estrategia de los demás competidoes y usarlo a su favor. + +Los ganadores del hackathon con los premios de Input Output + +Premios entregados por TxPipe e Input Output Global + +Una de las remeras Oxidar.org que se llevaron los ganadores + +## El equipo que lo hizo posible + +Nada de esto hubiera pasado sin el esfuerzo de las personas detrás de Oxidar.org, y el apoyo fundamental de nuestros sponsors. + +El equipo de Oxidar.org + +Hernan de Oxidar.org durante el evento + +Los organizadores presentando el desafío + +Gracias a **TxPipe** e **Input Output Global** por los premios, el espacio, y creer en la comunidad Rust de Latinoamérica. Sin su apoyo esto no existiría. + +Presentación del hackathon ante los participantes + +## Lo que nos quedó + +Más allá de los ganadores y el código, lo que nos llevamos es esto: una comunidad que crece, que aprende junta, y que se divierte rompiendo cosas en Rust. + +Fue el evento más ambicioso que organizamos, y salió bien. Eso nos da energía para seguir. + +Distruta de todas las [fotos](https://iog.pixieset.com/iog/) del evento, gracias a nuestros hosts! + +--- + +**¿Estuviste ahí? Contanos tu experiencia en nuestro [Telegram](https://t.me/+7PgAQVPclxIzOGQ0) o escribinos a [admin@oxidar.org](mailto:admin@oxidar.org).** + +**¡Hasta el próximo hackathon!** 🦀 diff --git a/static/images/posts/snakear-recap/equipo-oxidar.jpg b/static/images/posts/snakear-recap/equipo-oxidar.jpg new file mode 100644 index 0000000..9fee2d1 Binary files /dev/null and b/static/images/posts/snakear-recap/equipo-oxidar.jpg differ diff --git a/static/images/posts/snakear-recap/ganadores-hackathon.jpg b/static/images/posts/snakear-recap/ganadores-hackathon.jpg new file mode 100644 index 0000000..85c3795 Binary files /dev/null and b/static/images/posts/snakear-recap/ganadores-hackathon.jpg differ diff --git a/static/images/posts/snakear-recap/grupo.jpg b/static/images/posts/snakear-recap/grupo.jpg new file mode 100644 index 0000000..da3e260 Binary files /dev/null and b/static/images/posts/snakear-recap/grupo.jpg differ diff --git a/static/images/posts/snakear-recap/hackeando.jpg b/static/images/posts/snakear-recap/hackeando.jpg new file mode 100644 index 0000000..ff854ae Binary files /dev/null and b/static/images/posts/snakear-recap/hackeando.jpg differ diff --git a/static/images/posts/snakear-recap/hernan.jpg b/static/images/posts/snakear-recap/hernan.jpg new file mode 100644 index 0000000..7397d15 Binary files /dev/null and b/static/images/posts/snakear-recap/hernan.jpg differ diff --git a/static/images/posts/snakear-recap/juego-accion.jpg b/static/images/posts/snakear-recap/juego-accion.jpg new file mode 100644 index 0000000..bf8055b Binary files /dev/null and b/static/images/posts/snakear-recap/juego-accion.jpg differ diff --git a/static/images/posts/snakear-recap/organizadores.jpg b/static/images/posts/snakear-recap/organizadores.jpg new file mode 100644 index 0000000..4240214 Binary files /dev/null and b/static/images/posts/snakear-recap/organizadores.jpg differ diff --git a/static/images/posts/snakear-recap/premios.jpg b/static/images/posts/snakear-recap/premios.jpg new file mode 100644 index 0000000..d1296cb Binary files /dev/null and b/static/images/posts/snakear-recap/premios.jpg differ diff --git a/static/images/posts/snakear-recap/presentacion.jpg b/static/images/posts/snakear-recap/presentacion.jpg new file mode 100644 index 0000000..073421e Binary files /dev/null and b/static/images/posts/snakear-recap/presentacion.jpg differ diff --git a/static/images/posts/snakear-recap/quiz.jpg b/static/images/posts/snakear-recap/quiz.jpg new file mode 100644 index 0000000..90fbfcc Binary files /dev/null and b/static/images/posts/snakear-recap/quiz.jpg differ diff --git a/static/images/posts/snakear-recap/remera.jpg b/static/images/posts/snakear-recap/remera.jpg new file mode 100644 index 0000000..e7037f3 Binary files /dev/null and b/static/images/posts/snakear-recap/remera.jpg differ