👨🏼💻🎅🏻 This Christmas season, I had the joy of revamping a game I host every year, bringing people together and spreading Christmas vibes! 🎄✨
The game, a mobile-optimized web app designed as a real-life search challenge, delivered a daily “picture of the day” via Telegram and Slack. Participants used the app’s map and location features to explore and find the spot in real life.
This year, I introduced exciting upgrades: a sleek UI built with Vue.js, a robust backend powered by TypeScript-based GraphQL, and hosting on K3s at Hetzner ARM. All game content, like the daily pictures, was managed via Strapi, a headless CMS that made content management seamless and efficient. Static content was delivered via AWS S3 and CloudFront, with GitHub Actions managing CI/CD.
♻️ I’m already planning improvements for next year:
- 🚀 After several projects in Vue, I’m looking forward to diving into SSR with Nuxt.js to further enhance the user experience.
- 🔐 OpenFGA as fine grained authorization for multi region support
- 🏗️ For the backend, I’m considering GraphQL with 🦀 Rust, leveraging async-graphql for a faster, more efficient solution (and honestly, Rust is just fun to work with!). Alternatively, I’m also exploring GraphQL with NestJS, as the current implementation is based on TypeScript on top of the default Apollo Server/Fastify setup.
Creating this game each year is such a rewarding experience—it’s the perfect opportunity to experiment with new tech while staying focused on delivering the core business logic. I can’t wait to see what next year brings! 🚀😊
TypeScript, GraphQL (Apollo Server), Prisma, Strapi, K3S, PostgreSQL, Hetzner, AWS S3, AWS CloudFront, Kubernetes
TypeScript, Vue.js, Tailwind CSS, DaisyUI