Activity

Fede Vitu

Devlog #3 — phase 2. the canvas is real.

okay so. i was this close to shipping Tldraw — had it half integrated and everything — until i found out the production-ready version is paywalled. free tier wasn’t going to cut it. so i pivoted, went with Excalidraw, and honestly? best decision i’ve made this project. it’s open source, the integration was way smoother than i expected, and the moment i had it running inside Sketchmind i just sat there for a second because it looked exactly like what i had in my head from day one. that feeling doesn’t hit often.

the home dashboard got a full redesign. boards are sorted by last edited, each one shows a live Excalidraw thumbnail that renders on load, and the whole thing is wrapped in sketchmind’s color — light blue. every app i ship for Flavourtown gets its own color and this one felt obvious the second i tried it. also built a floating bottom nav bar inspired by iOS, very clean, two sections live right now (dashboard + profile). profile page renders your Google photo if you signed in that way, nothing crazy but it completes the loop.

the canvas itself has a custom side panel i built from scratch — background color picker using react-colorful, and a grid mode toggle that scales automatically with scroll. like a real graph paper notebook. every single change — board edits, profile updates, new boards — autosaves to Supabase in real time. no manual save button, no lost work.

what i thought would take me days took me a weekend. i’m not going to pretend that doesn’t feel good.

Changelog

Attachment
Attachment
Attachment
Attachment
Attachment
Attachment
0
Fede Vitu

Devlog #2 — the app is alive (kind of)

login works. like, actually works. Google OAuth, magic link via Resend, session handling, the whole thing. i basically transplanted the auth system from StackNote and Impostor-Game and adapted it here, which saved me probably a day of work. reusing your own code is genuinely underrated — why rebuild something that already works when the real challenge is the canvas editor sitting two phases ahead of me.

the home page is up too. you can create boards, they save to Supabase, they show up in the dashboard. it’s not pretty yet but the data layer is real and that matters more right now. the magic link email also got a redesign based on what i had in my previous project — cleaner, more on-brand. still no logo tho, that’s a debt i’m carrying into the next few days. sketchmind needs a face and right now it’s kind of faceless lol.

what’s missing is the thing that actually makes this app an app: you can’t open a board yet. you can create them, name them, see them in a grid — but clicking one does nothing. that’s the entire next update. getting the canvas loading from Supabase is the move. also i’ve been adding micro-animations everywhere because a stiff UI drives me crazy and i’d rather spend 20 extra minutes on transitions than ship something that feels like a prototype. almost there.

Attachment
Attachment
Attachment
Attachment
0
Fede Vitu

Devlog #1 — sketchmind starts now.

hey, first post here. i’m fede, and for the next ~12 days i’m building Sketchmind, a visual canvas. think excalidraw but made for students who actually want to think on a whiteboard, not just draw boxes. mind maps, real-time collab, study templates, the whole deal. i have less than two weeks to ship this and honestly that’s terrifying, but also kind of the point.

today was all setup. not the glamorous part, but the part that makes everything else possible. got Supabase configured with the full DB schema, wired up Google OAuth through Google Cloud Console, and set up Resend for magic link auth. i’m not starting from zero tho, i’m pulling patterns from my older projects and adapting them here, which is saving me a lot of time on stuff like auth that i really don’t want to spend 3 days on when the canvas editor is where all the interesting problems live.

one thing i’m doing differently this time: i dropped Next.js and went with Vite + Bun instead. every project i try something new, and this felt like the right moment to actually learn the stack properly rather than defaulting to what i already know. no turbopack, no app router, just lean and fast. we’ll see if i regret that in a week lol. setup’s clean tho, and the dev server starts in like 300ms which is already making me happy.

Attachment
Attachment
Attachment
Attachment
0
Fede Vitu

Shipped this project!

Hours: 125.93
Cookies: 🍪 1680
Multiplier: 13.34 cookies/hr

i built StackNote — a full modular study workspace with a rich block editor, AI assistant, flashcard generation, spaced repetition, Pomodoro timer, semantic planner, and offline support, all from scratch. the hardest parts were getting the AI integration stable on Groq’s free tier (rate limits everywhere), the drag & drop file manager that took way more hours than i’d like to admit, and a whole embeddings pipeline i built with Voyage AI that i had to completely delete because 3 req/min just doesn’t work for a note-taking app. honestly there were moments i wanted to drop the whole thing, but i kept going because the idea of building something that actually helps students study better felt worth it. i’m most proud of how far it grew from what i originally imagined — and that it genuinely works.

Fede Vitu

Devlog #12 — this is it. StackNote is shipped.

last update before i submit this thing. this one was all about stability and making the app actually feel like a real installable product. fixed a ton of bugs — including the embarrassing one where a logged-in user could still access the login page instead of being redirected automatically. added a full offline-first layer with IndexedDB so the app queues changes locally when there’s no connection and syncs everything automatically when you’re back online. the PWA side also got properly finished: new icons at every resolution, maskable icons for Android, Apple touch icons, and a dedicated offline page. if you install StackNote now, it genuinely behaves like a native app.

i’m not going to pretend this was easy. there were a lot of moments where i wanted to just stop. bugs that took days to find, features that didn’t work the way i imagined, things i had to cut entirely (RIP semantic search). but something kept pushing me forward — the idea that even if this app only helps a handful of people study better and feel less overwhelmed before exams, that’s enough. that was always the point. the AI isn’t the most powerful model out there, but i know that with a premium plan the performance would be dramatically better, and the foundation is solid enough to grow.

i built something way bigger than what i had in my head when i started. that doesn’t happen often — usually the final result is smaller than the vision. i’m genuinely proud of this one. thanks for following along the whole way 🚀
THANK U FOR TESTING STACKNOTE!

Changelog

Attachment
Attachment
Attachment
Attachment
Attachment
0
Fede Vitu

Devlog #11 — i spent weeks on embeddings and then deleted everything

okay so. a friend of mine who’s been studying ML stuff told me about vector embeddings and semantic search and it genuinely sounded like the perfect addition to StackNote’s search system. so i went all in — integrated Voyage AI, built the whole pipeline, wired it up to the app. and then i realized: 3 requests per minute on the free tier. for a note-taking app where users are constantly editing multiple notes simultaneously. it was creating a bottleneck that made the entire app feel slow, which is the exact opposite of what i want. so after way too many hours of work, i ripped the whole thing out. full delete. it hurt. but i did learn a lot about how embeddings and vector search actually work under the hood, and i’m sure it’ll be useful eventually — just not here, not now.

on the actual shipped stuff: the trash system is live. soft delete with 30-day retention, restore for notes and folders, permanent delete that also cleans up stored files, and a cron job that purges old entries automatically. also added Sonner for toast notifications across the whole app — file renamed, note deleted, version restored, save error, all of it now has proper feedback instead of just silently succeeding or failing. the Planner also moved to a better spot in the sidebar and the UI now shows past exams too, which was a pretty obvious missing piece.

not my favorite update to write about but that’s how it goes sometimes. you build something, it doesn’t work, you learn from it and move on 🗑️

Changelog

Attachment
Attachment
Attachment
Attachment
Attachment
Attachment
Attachment
0
Fede Vitu

Devlog #10 — the home page is finally a real dashboard

the biggest visible change this update is the home page, which got a complete redesign. it’s gone from “a button that says create note” to an actual dashboard — personalized greeting, recently edited notes in a Notion-style card carousel, a full file manager where you can create, organize and preview notes, folders, images, audio and PDFs without ever opening a note, plus widgets for AI token usage, the study planner, and upcoming exams. the planner also changed how it works: instead of pulling from flashcard decks, it now uses your actual notes as the content source, which makes way more sense. the app also now installs as a PWA so you can add it to your home screen.

the drag & drop in the file manager took an embarrassing amount of hours. i won’t say exactly how many but it was a lot. got it to a solid state eventually — reordering persists correctly, nesting works, and it doesn’t explode when you do something unexpected. also shipped semantic search with embeddings on top of the existing full-text search.

bugs. so many bugs. the app is getting complex enough that fixing one thing breaks two others and i’ve been in that loop for a while. still fighting some of them but i wanted to show the progress because the new dashboard genuinely makes the app feel like a different product compared to where it started

Changelog

Attachment
Attachment
Attachment
Attachment
Attachment
0
Fede Vitu

Devlog #9 — Phase 4: study tools, Pomodoro and the free tier struggle

phase 4 is here and this one finally makes StackNote feel like a real study workspace. the two new widgets are now live everywhere in the app: a quick note you can pull up from anywhere without losing context, and a Pomodoro timer with ambient sounds — Ocean, Night, Fire and Rain. getting those sounds right took way longer than expected. i had to hunt for royalty-free audio, then spend a bunch of time in Audacity editing each clip into a seamless loop so you can’t hear the moment it restarts. small detail but it mattered to me. also shipped a full quiz system with AI generation, a planner that creates daily study sessions from your exam dates, and flashcard study sessions with proper review tracking.

the hardest part of this update was the AI-powered quizzes. i’m on Groq Cloud’s free tier and the rate limits hit constantly when generating quiz content, so i had to build fallbacks basically everywhere — handling quota errors gracefully, retrying smartly, and making sure the app never just crashes or shows a broken state when the model refuses to respond. not fun. the settings panel was also a lot of work since it shows live AI usage stats per user in real time, which required wiring up quota tracking across text, flashcards, quizzes and voice all in one place.

these are the last big feature updates before i wrap the project. the app has come a long way from a Next.js boilerplate with a database schema — it’s genuinely a full study workspace now. a few more things to polish and then i’m calling it shipped

Attachment
Attachment
Attachment
Attachment
Attachment
Attachment
Attachment
Attachment
0
Fede Vitu

Devlog #8 — from 56 to 100 on Lighthouse (and Google said yes)

Google accepted the appeal. took a few days but the StackNote logo is now showing up correctly in magic link emails sent from [email protected]. small win but it was genuinely bothering me. this update was mostly invisible stuff — no flashy new features, but the kind of work that makes the app actually feel good to use.

the big one: Lighthouse went from 56 to 100, a perfect score in localhost! that’s not a typo. i audited every library loading on startup, removed what wasn’t needed on the critical path, lazy loaded the editor and AI panel, compressed the StackNote logo from nearly 1mb down to under 10kb, and added skeleton screens everywhere while backend data loads in the background. the app now feels instant. also added image zoom for attachments in notes, swapped the default emoji picker for emoji-picker-react with Apple-style icons, and improved the offline autosave system to handle edge cases that were causing silent failures.

not the most exciting devlog to write but honestly this kind of optimization pass is what separates a project that works from a project that feels polished. the foundation is solid now — next updates should be back to actual new features

Attachment
Attachment
Attachment
Attachment
Attachment
Attachment
Attachment
Attachment
0
Fede Vitu

Devlog #7 — first stable demo and a Google ban speedrun

the app has its first stable demo running on the actual domain. huge milestone — the production server was redirecting everything to localhost before (classic) and fixing that meant reworking the entire auth flow. also rebuilt the magic link email from scratch: custom template with violet gradients and glows that match the app’s aesthetic, adapted for email clients since you can’t use transparency or backdrop filters in HTML emails so i had to fake those effects manually. it actually looks really good now.

and then. i tried to create a Google account with the [email protected] address so i could upload the StackNote logo as a profile picture — the easiest way to get the avatar to show up in Gmail inboxes. Google took one look at a custom domain named “noreply” and instantly suspended the account for “bot-like behavior”. so now i have a pending appeal explaining that i am, in fact, a human who just wanted to put a logo on an email. all of this just to display a profile picture. incredible.

the good news: the demo works, emails send correctly and the magic link flow is fully functional. the logo in the inbox will have to wait until Google decides i’m a real person 🙃

Attachment
Attachment
Attachment
Attachment
0
Fede Vitu

Devlog #6 — fixing AI stuff

quick one this time. i’ve been pushing hard to get everything polished before classes starts again so no time to waste. managed to fix a bunch of the AI issues from last update — the assistant can now respond with LaTeX formulas and they render correctly everywhere, including inside flashcards. also fixed inline LaTeX detection when pasting content, which was just not working before and honestly i have no idea why it broke in the first place lol. the flashcard panel also got a full redesign to match the rest of the app’s style, and now you can set the output language, choose how many cards to generate, and add custom instructions to the model so it focuses on specific topics or ignores certain parts of your notes. small update but the app is feeling noticeably more solid than a week ago

Attachment
Attachment
Attachment
Attachment
0
Fede Vitu

Devlog #5 — AI is (almost) here

okay so i’m going to be real with you: this update isn’t fully working yet. and that’s exactly why it took this long — this is easily the hardest thing i’ve built across all my projects. but the hours kept piling up and i needed to post something. the AI integration is like 80% there, still polishing and fixing things, but here’s what’s been built so far.

the main addition is a full AI assistant called Sage — a side panel with persistent chat sessions, streaming responses, and context modes (you can give it access to your current note, all your notes, or pick specific ones manually). there’s also a /ai inline block directly in the editor so you can prompt the assistant without leaving the note. on top of that: automatic flashcard generation from your notes, lecture transcription via Groq Whisper, and quick text actions like summarize, expand, translate and fix — all with quota control so i don’t blow through API limits. for the AI provider i went with Groq Cloud since it has the most reasonable free tier i could find, and it was perfect for prototyping this without paying anything.

this is my first time ever integrating an AI API into one of my projects so the learning curve was steep. a lot of the complexity is invisible — streaming, token tracking, quota management, session persistence, context building — none of that shows up in the UI but it all had to work before anything else could. still some rough edges to sand down, but when it’s done it’s going to be the feature that makes StackNote actually special 🤖

Attachment
Attachment
Attachment
Attachment
Attachment
Attachment
Attachment
Attachment
0
Fede Vitu

Devlog #4: version history, link previews and that bug i finally killed

a lot of smaller but really polished additions this time. the biggest one is the new version history system. the app now creates smart checkpoints instead of saving a version every 2 seconds like before. you can browse old versions, preview any of them side by side with the current note (with synchronized scroll), and restore with one click. there’s also a local cache for the last 5 notes you opened, so if you’re offline, edits are saved locally and synced automatically when you’re back. on top of that: link previews now appear automatically when you paste a url— title, description, and image are fetched instantly, YouTube links included.

i also fixed the paste system which was honestly broken for anything complex. pasting markdown with code blocks, equations, mixed formatting, it all renders correctly now. code blocks even auto-detect the language. and file downloads no longer open a new tab, they just download directly like they should’ve from the start.

oh and remember that Account panel bug that was driving me insane last update? fixed. the whole app is finally properly responsive. that one felt really good to close. also attaching the new StackNote logo i forgot to share last update. next, I’ll continue working on google sign-in. getting oauth working correctly and making sure everything lands cleanly in the database

Attachment
Attachment
Attachment
Attachment
0
Fede Vitu

Devlog #3: rich editor, Supabase migration and a bug that drove me crazy

this update was huge but honestly exhausting. i migrated the whole database to Supabase. took way longer than expected, but i needed it for the S3 storage too. with that in place, i overhauled the entire block editor: you can now embed PDFs, images, audio recordings, LaTeX formulas, YouTube videos, and there’s a full syntax-highlighted code editor powered by Shiki with a custom theme and support for 25 languages. drag & drop upload, 50mb limit per file, and all of it stored securely with Row Level Security so users only ever see their own stuff.

on top of that: full-text search with tsvector (ctrl+k, searches by content now, not just title), note covers with Unsplash API integration, sidebar animations, responsive mobile sidebar, and a new minimalist logo. three stacked books with a little spark on top hinting at the AI features coming soon.

the one thing i couldn’t crack: the Account panel layout breaks completely on mobile, buttons overlap everywhere, and after two days of fighting it i gave up for now. it’s frustrating but i’m moving on. there’s AI to integrate and i’m not letting one stubborn CSS bug hold me back 😤

Attachment
Attachment
Attachment
Attachment
Attachment
Attachment
Attachment
0
Fede Vitu

okay this one took a while but it was worth it. i basically built the entire foundation of the app: the database is fully set up with Prisma (users, workspaces, folders, notes, and even automatic note versioning), auth is working with both Google and magic links, and the REST API covers everything the frontend needs. the sidebar lets you create, rename, delete and duplicate notes and folders, the editor autosaves with a debounce so you never lose progress, and i added optimistic UI so the app feels instant even before the server responds. also redid all the CSS tokens from scratch — the dark theme is finally looking how i wanted it to. Phase 2 starts now

Attachment
0
Fede Vitu

okay so i’ve been putting in a few hours already and honestly the progress feels really good. the block editor is up and running. you can write notes with full markdown support: headings, bullet lists, numbered lists, checklists, quotes, code blocks, all of it. it’s built on top of BlockNote so a lot of the heavy lifting is handled, but getting it to look right with the OLED dark theme took some tweaking. feels very clean tho. the foundation is there and it’s way more satisfying to look at than i expected for this early stage. next up: file tree, autosave, and trying not to break everything in the process lol

Attachment
0
Fede Vitu

Shipped this project!

Hours: 55.54
Cookies: 🍪 1221
Multiplier: 21.99 cookies/hr

i built a full-stack multiplayer social deduction game from scratch: online rooms, auth system, leaderboard, i18n, PWA and all. honestly i got inspired by all the YouTube and TikTok videos i kept watching and just wanted to make something like that for me and my friends. it somehow turned into the most complete project i’ve ever shipped lol. super proud of how polished it ended up looking and i can’t wait to see people actually play it

Fede Vitu

ok so… i think this one might actually be it. like the app feels done done and i’m really happy with how it turned out
when i started this i just wanted to make a basic impostor game. somehow it became a full-stack thing with Redis, i18n, PWA support and now a full auth system with a leaderboard lol. i did NOT see that coming. but honestly this was probably the most i’ve learned from a single project. most of these technologies i’d never really used before so it was the perfect excuse to actually dig into them
shoutout to my friends and family for playtesting and making me laugh the whole time. hope whoever plays this enjoys it as much as we did 🙏

anyway here’s what changed:
auth + leaderboard: added login/registration with bcryptjs and jose. wasn’t as bad as i expected since i’ve done auth before. now accounts track your stats and you show up on the leaderboard. guests can still play, they just don’t get saved
backend refactor: rewrote a ton of room logic to use atomic Redis operations. race conditions are basically gone now. also improved how abandoned players are detected and labeled
ui + i18n polish: swapped in proper fonts (Inter + Russo One), fixed a mobile overflow bug, added a leaderboard button to the hero page, and now the page title actually updates when you switch languages

that’s everything. it’s been a ride but i’m really proud of this one.

Attachment
Attachment
Attachment
0
Fede Vitu

ok so this is probably the biggest update i’ve ever pushed for impostor-game and i’m actually kinda proud of it lol

basically i ripped out the entire room system and rebuilt it from scratch using Redis on the backend. sounds boring but it means online rooms are actually stable now?? like disconnects don’t break everything anymore and dead rooms clean themselves up automatically. it was a nightmare to migrate but it’s so much better

also finally added proper i18n. the game is now fully playable in english AND spanish. there’s this little floating button that switches the language on the fly without reloading anything which is pretty clean ngl

oh and i redid the whole category system. hosts can now pick which categories they want before starting the match (food, countries, objects, etc.) and i added like hundreds of new words across both languages so the game has way more variety now

and as a last thing, turned the whole thing into a PWA. added icons, a manifest, and an install button that actually detects what device you’re on. so you can literally download it to your homescreen like a real app which is insane to me

overall it was a LOT of work getting all of this to play nice together but the app feels really polished now. let’s gooo 🚀

Attachment
Attachment
Attachment
0
Fede Vitu

I recently had to migrate the live demo of Offliner. The reviewers informed me that hosting on Hugging Face is not allowed under the current deployment guidelines, even though my app is a full-stack project and not just an AI model. Since I cannot afford a paid hosting service that meets the processing requirements of this application, I decided to self-host the demo locally so the voting process can continue.

This new implementation took a massive amount of time, research, and trial and error. To make it work, I had to replace the computer’s operating system with a dedicated server OS, configure all the local networking and port forwarding, set up a custom domain, and properly route everything through Cloudflare to my “offliner” subdomain. I put my absolute best effort into this setup because I really wanted to ensure the project had a functional live demo for the community.

The app is now running 24/7 on an old spare computer at my house. It is powered by an AMD Athlon X2 270 processor with no dedicated GPU, 4GB of DDR3 RAM, and an internet connection with less than 1mb/s of upload speed. Because of these severe hardware and bandwidth constraints, I kindly ask you not to abuse the server. It can handle light testing, but it will crash if it receives too many simultaneous requests.

Please note that if the computer is idle for a while, the hard drive goes into a sleep state. This means your very first download attempt might fail or time out. If that happens, simply try again immediately, and the download will process correctly. This link is strictly for demonstration purposes. If you want to use the app to its full potential, I highly encourage you to clone the repository and run it locally on your own machine.

Attachment
Attachment
0
Fede Vitu

I recently shipped a major update to WhatsAnalyzer to resolve critical compatibility issues and improve the application’s overall architecture. I completely refactored the parsing engine to dynamically support multiple date and time formats, and added full compatibility for iOS chat exports by handling bracketed timestamps and cleaning up invisible Unicode characters that were breaking the logic.

On the backend side, I simplified the user experience by moving the dashboard directly to the root route and fully Dockerized the application using Gunicorn to make it production-ready. Finally, I migrated the live demo to Hugging Face. Adapting the new Docker container setup to their specific infrastructure ended up taking much more time and effort than I originally anticipated, but the deployment is now completely stable and running smoothly.

Attachment
Attachment
0
Fede Vitu

This is one of the biggest updates I have shipped for Impostor-Game! I dedicated a lot of time to polishing the experience and making sure the app is bug-free, though I still have ambitious plans for the future, like adding i18n (English and Spanish), custom categories, expanding the word lists, and eventually turning it into a true SPA.

The biggest technical leap is the new local storage and session management system. The app now saves the room state and scores locally, so if someone accidentally refreshes, no progress is lost. I also added heartbeat tracking: if a player disconnects online, the host can pause and wait for them to reconnect, or simply kick them.

I completely overhauled the game loop as well. Lobbies now support 3 to 16 players with up to 4 random impostors, and rounds keep going until only two people are left or the impostors are caught. Finally, I added host controls to disable chat, fixed a critical bug preventing players from leaving rooms, polished the UI with entrance animations, and wrote the full README documentation.

Attachment
Attachment
0
Fede Vitu

This update was all about fixing the core game loop and making the gameplay fair and smooth. I finally squashed a really annoying bug in the local mode where a typo in the JSX was causing the game to show completely contradictory results at the end of a match. I also tweaked the local “Pass & Play” mode so you only have to see your roles in the first round instead of passing the phone around every single time, which makes the pacing way faster.

For the online mode, I completely refactored the main view component to clean up the code. The biggest gameplay change is that I locked down the voting system: eliminated players can no longer vote, you cannot vote for yourself, and roles are completely hidden so everyone looks neutral. I also changed the results screen to hide who voted for who, keeping the mystery alive by just showing the total vote counts per person. Everything is transitioning perfectly now thanks to a new helper function I wrote for the rounds. The game is feeling super solid and competitive. The latest game updates are coming soon!

Attachment
Attachment
0
Fede Vitu

This update makes the app feel so much more cohesive and polished. I finally built a unified navigation bar component to replace all the messy, hardcoded headers across the different game phases and lobbies, which cleans up the codebase a ton. I also updated the site metadata and added a sleek new app icon for browsers and mobile devices. Visually, I gave the footer a really cool glassmorphism effect with some backdrop blur so it sits nicely over the background elements. On the gameplay side, I tweaked the role reveal screen so players now have to actually hold the button down for half a second to advance the turn, preventing accidental skips. I also swapped the rendering logic on that screen to use inline CSS display toggles instead of destroying the elements, which makes the whole reveal feel way snappier. I’ve attached the new app icon. It will most likely change in future versions, but I wanted to start shaping the app with a logo.

Attachment
0
Fede Vitu

This update is a major visual polish for the game! I noticed that telling the different roles apart needed to be more intuitive, so I went through the entire app and completely updated the color scheme. Now, everything related to the innocent “Friend” role uses a distinct green “success” color instead of the generic accent color across the reveal phase, the scoreboard, and the rules. It makes reading the game state so much easier and faster during the rounds. I also gave the online lobby a massive facelift by wrapping the menus in sleek cards with smooth hover effects, and I disabled autocomplete on the inputs so your browser stops trying to autofill your name over the room codes. Finally, I tweaked the UI buttons to look sharper with rounded borders. The whole interface is feeling incredibly clean and responsive right now!

Attachment
Attachment
0
Fede Vitu

This update is all about making the game look and feel way better. I focused heavily on the UI and the overall user experience. I saw a really cool design on a website recently and got inspired to build a custom pointer grid overlay that follows your cursor around the screen, keeping that sharp red theme we have going. I also swapped out the boring flat background for a modern grid and added some fresh animations to the home page so it feels a lot more alive when you first load it up. On top of the visual upgrades, I squashed some annoying CSS bugs that were messing with the layout. Finally, I spent some time polishing the actual in-game phases to make the transition between rounds and voting much smoother. It is starting to feel super polished now!

Attachment
0
Fede Vitu

This is a massive update for Impostor-Game. I completely threw out the old Python and Flask foundation and rewrote the entire project from scratch using React, TypeScript, Next.js, Tailwind CSS, and Radix UI. This was a huge effort for me, and with the help of a little bit of AI, I was able to migrate to this new React-based system. Learning React is something I have always wanted to do, and I felt like this Hack Club project was the perfect moment to finally jump in. Instead of sticking to the backend tools I was already comfortable with, I wanted to step out of my comfort zone and use this project to really dive deep into modern web development and frontend architecture. I know I will probably run into some bugs by experimenting this much, but figuring them out is part of the learning process!

Along with the new tech stack, the UI got a complete overhaul. I moved away from the bright, friendly look and built a sleek, modern dark mode with sharp red accents and smooth animations to push what these new frameworkks can do. It feels much more like a real, polished party game now.

The best part is that the game is now 100% playable! Both main modes are fully functional. In “Play Online”, you can create or join a room with a code (minimum 4 players), and the server automatically handles assigning the impostor, the secret word, and the category to everyone’s personal devices. If you are all hanging out together, “Pass & Play” lets you run the whole game on a single phone that you pass around to check your roles. I also managed to implement a full chat system, the voting phase to kick out the suspected impostor, and the point-tracking system to kep score across rounds.

Attachment
0
Fede Vitu

This is the very first update and commit for Impostor-Game. The application is not playable yet, but I am super excited to finally start building it. I decided to use Python with Flask for the backend simply because it is the technology I am most used to and comfortable with. I was really inspired by how trendy this game is right now. I wanted to bring that exact vibe to the web to give people another way to hang out, have fun with friends or family at gatherings, and just share some laughs. So far, I have only set up the basic project structure and the initial UI, so there is still a massive amount of work to do and many features to add before it actually works. My goal is to keep maintaining and updating this application in the future until it is completely finished.

Attachment
0
Fede Vitu

Just shipped a quick hotfix. I found and resolved an annoying bug that was causing some downloads to freeze and get completely stuck right before starting. The queue is now working perfectly again :)

Attachment
0
Fede Vitu

Shipped this project!

Hours: 33.79
Cookies: 🍪 966
Multiplier: 28.59 cookies/hr

I am incredibly proud to finally ship Offliner, a project that evolved from a simple Python script into a fully scalable, enterprise-grade media archiver. Offliner allows users to curate and download media for offline use, featuring intelligent integrations like SponsorBlock to automatically skip non-music segments and native metadata embedding,.

The biggest challenge by far was the deployment phase. Moving from a standard local Flask environment to building a Docker container was a completely new and difficult experience for me. It took a lot of trial and error to correctly containerize the web server, the Redis background workers, and dependencies like FFmpeg. Finding a suitable hosting service that could handle this asynchronous architecture was also tough, but I eventually managed to deploy it successfully on Hugging Face.

I am most proud of the backend architecture and the user experience. I decoupled the heavy downloading tasks from the web server using Redis Queue (RQ), meaning the app handles multiple requests asynchronously without freezing. I also implemented Server-Sent Events (SSE) to feed real-time download progress directly to the frontend, built a robust anti-abuse system with strict rate limits (by IP, download counts, and content duration), and completely redesigned the UI with fully responsive modals and modern toast notifications.

Please note: The live link provided is simply a demo to showcase the functionality. It is running on limited hardware and is not intended or provisioned to be a server for massive bulk downloads.

Fede Vitu

This is the biggest update since I started the project. I have spent a huge amount of time and effort refactoring the entire application because I didn’t want Offliner to be just another “personal script”, I wanted to build it with a scalable, enterprise-grade architecture.

I completely split the application logic. The web server is now lightweight, while heavy download tasks are offloaded to background workers using Redis Queue (RQ). This makes the app truly asynchronous and scalable,,you could technically run multiple worker nodes to handle hundreds of simultaneous downloads without freezing the UI.

Key Technical Improvements:

  • I rewrote logic.py, optimizing ~2700 lines down to ~2400 efficient lines and switching to native yt-dlp metadata embedding for stability.
  • Implemented Server-Sent Events (SSE) to stream the download progress to the user instantly (no more guessing if it’s stuck!).
  • I added a real-time validator for Netscape Cookies.
  • I included a Dockerfile and start.sh so it can be deployed anywhere with a single command.

It was a challenging refactor, but the app is now robust, faster, and ready for the real worldd 🚀

0
Fede Vitu

I have implemented a major redesign of the user interface to improve accessibility and responsiveness across all devices. The Download Settings menu has been moved from the navigation bar to the main body of the page and now opens in a fully responsive modal window instead of a side panel, offering a cleaner and more organized layout.

I also added a “Paste” button that integrates with the system clipboard to instantly paste URLs and trigger the search automatically. The notification system was completely overhauled with modern “Toast” alerts that feature entrance and exit animations, context-aware styling, and a visual progress bar indicating the auto-dismiss time.

On the visual side, the top bar is now fixed with a blur effect, and I fixed several CSS issues to ensure the content adapts vertically on small screens without overflowing. Finally, I included a legal disclaimer footer to clarify the terms of use regarding content distribution and copyright.

Attachment
Attachment
Attachment
0
Fede Vitu

I have been working heavily on the core stability of the application to ensure it is easy to maintain in the long run. My main focus was implementing a comprehensive anti-abuse system that allows configuring limits via environment variables, restricting downloads by quantity, duration, and frequency per IP to protect the server.

I also refactored the interface to use a unified design for both videos and playlists, making the result containers more compact to reduce scrolling. On the backend, I optimized FFmpeg commands for faster processing, added support for parsing full Spotify albums, and fixed specific bugs like WAV metadata visibility. Finally, I streamlined the download logic to force a choice between audio or video, preventing previous conflicts and ensuring a reliable experience.

Attachment
0
Fede Vitu

I realized that sometimes you want a video, and sometimes just the audio, but changing the global settings every time is annoying. So, I added Per-Download Customization! You can now choose the format and type for each item individually without touching the main recipe.
Other spicy updates:

  • Modern Formats: I swapped out the old AVI/FLAC containers for MKV and WEBM. FFmpeg processes them much faster and they play nicer with modern players.
  • Transparency: Search results now feature a SponsorBlock badge that shows exactly how many minutes of “filler” (intros, promos) you are saving per video. ⏱️
    The app feels much more flexible now!
Attachment
0
Fede Vitu

No more copy-pasting! Search is here 🔎
I got tired of switching tabs to copy URLs from YouTube, so I decided to build a search engine directly into Offliner.
New stuff:

  • Integrated Search: You can now query YouTube and YouTube Music directly from the dashboard to find your ingredients faster.
  • Automatic Cleanup: Implemented a backend logic to wipe the temporary directory after processing. No more storage clutter!
  • Code Refactor: Cleaned up the Flask templates to make the frontend modular and easier to maintain.
Attachment
0
Fede Vitu

Say hello to Offliner. I wanted a tool to keep my media library organized without relying on sketchy websites.
I’ve just finished the main UI using Bootstrap with a custom Dark Mode (essential for late-night coding). I also implemented a robust configuration panel where you can toggle specific filters like “Music Offtopic” or “Interactions”.
Best part? The backend is completely stateless, no databases, no tracking. It processes your request in-memory and hands you the file. Clean and simple.

Attachment
1

Comments

RespectableDot
RespectableDot 3 months ago

Nice

Fede Vitu

Shipped this project!

Hours: 6.68
Cookies: 🍪 144
Multiplier: 21.58 cookies/hr

I am finally ready to ship WhatsAnalyzer. This project started as a simple idea to read text files but turned into a full-stack challenge. I used Python and Flask for the backend, where I really had to push my skills with Regex to handle the messy date formats from different devices. For the frontend, I learned how to implement Chart.js to make the data look good and added a Dark Mode because it just looks better. The hardest part was definitely optimizing the parsing logic to be fast and ensuring that all data is processed in-memory for privacy. It was a lot of work, but seeing the dashboard come to life was worth it :)

Fede Vitu

Cooking with Data: Sentiment Analysis & NLP 🧠

The kitchen is getting hot! 🔥 I’ve been working hard on the backend logic for WhatsAnalyzer. I implemented VADER for sentiment analysis to detect the “vibe” of the chat and optimized the regex parsing to handle different WhatsApp export formats.

On the frontend, I connected the Flask backend to a responsive Bootstrap + Chart.js dashboard. It now generates Word Clouds and Activity Heatmaps instantly.

Attachment
0
Fede Vitu

I’m cooking up WhatsAnalyzer! 🍳 It’s a Python/Flask web app that takes raw WhatsApp chat exports (the ingredients) and turns them into a tasty dashboard of statistics. I’ve already implemented a dark mode UI and I’m currently polishing the regex patterns to handle different date formats. Can’t wait to visualize who really talks the most in my friend group!

Attachment
0