StackNote banner

StackNote

12 devlogs
125h 56m 10s

Tired of juggling five different apps just to get through a study session? StackNote is a modular browser-based workspace built with Next.js and TypeScript, designed to keep everything in one place. Write rich notes with a block editor that suppor…

Tired of juggling five different apps just to get through a study session? StackNote is a modular browser-based workspace built with Next.js and TypeScript, designed to keep everything in one place. Write rich notes with a block editor that supports KaTeX equations, syntax-highlighted code, embedded PDFs, and audio — all autosaved to the cloud. The AI assistant reads your actual notes to summarize, explain, generate flashcards, and build quizzes from your own content. Combine that with a built-in Pomodoro timer, a spaced repetition flashcard system using FSRS scheduling, and an exam planner that turns your linked notes into a day-by-day study plan — and you get a workspace that doesn’t just store your knowledge, it helps you actually learn it.

This project uses AI

I used it as a tool throughout the project, both for brainstorming and implementation. Before writing code, I used it to shape the product direction and break it into buildable phases

Demo Repository

Loading README...

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