Activity

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 about 2 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