NO FIXES I spun up majiks.kids by forking the existing majiks.online v5.5.0 codebase. It was a clean break, moving 197 files into a new structure to build something distinct from the start. The initial commit brought in the whole skeleton: Docker setups, CI workflows, config files, and the base application structure. It was a big lift just to get the lights on.
Once the skeleton was standing, the real work began on the frontend. I tackled Phase 1 of the kid-friendly experience. This was a massive refactor, touching 98 files across the entire app. I stripped out 20239 lines of legacy code and replaced them with 4247 lines of new, focused logic. The goal was to get the homepage, core pages, and key components working. I built out the authenticated library views, playlist editing, and the settings page. It was a heavy rewrite, but it was necessary to ensure the new kid-facing interface was stable and fast.
With the UI taking shape, I turned my attention to the backend. The API routes were a mess of TypeScript errors, especially around the webhooks and admin endpoints. I spent the bulk of the afternoon cleaning up the schema and fixing the routes. I touched 11 different files, including the user admin routes, playlist management, radio station next-track logic, and the Stripe webhook handler. The result was a zero-error TypeScript build. The API is now type-safe and ready to handle the data flowing from the new frontend. It was tedious, but satisfying to see those red squiggles disappear.
Once the skeleton was standing, the real work began on the frontend.
Meanwhile, over in the art studio, I ran into a small but annoying bug. The img2img feature was blocking source images because of overly strict path validation. It was a simple fix, but it was blocking progress. I updated the HTTP and RPC server files to relax the validation logic. It was a 25-line change that unblocked the entire image generation pipeline.
Also today: I updated the dependency lock files and seeded the database with initial tier data to support the new structure.
The day added up to a solid foundation. I have a new project forked, a clean TypeScript build, and a working UI skeleton. The plumbing is fixed, and the code is ready for the next phase of development.
Real product captures — click any to enlarge.