June 26, 2025
got halfway through implementing database schemas and auth when i realized convex just doesn't work with waku :( so uhhh yea gonna have to restart and just build with something that's actually supported
mimicked the waku starter, added dprint and inter, slapped on a favicon/title and now it's on vercel :) i have no idea how i'm gonna build this btw
updated the design to be more consistent (e.g. background colors and stuff) across all components, removed some redundant components that were all kinda doing the same thing, switched to using different gemini models for different stuff (2.5 pro for analysis, 2.5 flash for chat, 2.0 flash for suggestions), and a smattering of other lil bug fixes and stuff. don't really have big visual changes to show so here's the (totally very well thought out and organized) file structure
more improvements to chat, including proper persistence of suggestions and the like both in localhost and in convex. also fixed some bugs around 429 errors (gemini rate limits) and made sure the 404 error displays properly
big changes!!! the analysis is now wayyyy more in-depth (i tried to make it more quantitive and actionable instead of generic descriptions), and there's a chatbot!!! we'll see how long i have till the gemini rate limits kick in lol
fixed some bugs around generation not saving correctly, and added a progress bar for analyzing! plus you can now cancel during analyzing if you want :)
yet another massive dump of features (this is the last time i promise only frequent commits and devlogs from now on), mostly focused on way better structured analysis plus a bunch of other little features and improvements (like you can now click the header to go back home!) idk how to rlly explain it all so just go try it yourself already :) it's free!!!
lost track of the time and made a ton of changes, including click to upload and zip uploading and better streaming and structured output and color palettes and yea you get the idea, i also prolly added a bunch of bugs that need to be fixed :heavysob: but anyway go try it out now
analysi (i know it's a misspelling lol but whatev) now save to convex! so you can just copy the url and share it :)
added streaming!!! so everything feels way slicker now, especially since i added this really nice fade-in animation as it flows in (sadly gemini streams in chunks rather than character-by-character so it's still a little jank)
effectively rewrote the whole thing (summer of making? ha! more like summer of rewriting :D) idk what i even did but roughly there are a) pending states! yay b) way to see the output other than a giant browser alert! yay and c) there is no c i literally spent an hour doing all of that :heavysob: please vote so i don't become depressed guys
analysis now works!!! kind of... i'll fix pending states, error handling, that sort of thing next and then add an actual view for the analysis
fixed some disabled/focus/hover states, and added a big analyze button that currently does absolutely nothing
the drag-and-drop now actually collects the files instead of just showing a dumb message (lol) next step is uploading those for analyzation (yes that was intentional) oh and btw i added a neat little filtering thing so you can drop as many files as you want but only the pdfs go through
the message now updates to show whether you're dropping/have dropped files or not
after finishing all the boring setup (react, vite, tailwind, vercel, whatever) i made a simple little splash screen that will hopefully eventually do something
you drop some pdfs, gemini spits out some slop (bcs who doesn't love slop :))))) <-- (also look at that *massive* chin)
removed the other example for now because @/Olive is still trying to fix it, as soon as she does i'll add it back :)
fixed some readability issues so the links are easier to see now
just some small cosmetic changes to colors, fonts, and cosmetics :)
fixed some fonts, added links to the rewards, and a really minimal rsvp form that someone is def going to break lol :)
created the splash and added some basic analytics :)
there was a bug with virtualization where stuff stuck to the gumwall would sometimes disappear early, so i changed the virtualization logic to try and account for the size of the thing stuck to the wall. i don't think it worked 😭 but i put too much effort not push so uh here we go
BIG CHANGES!!!! ok well first i did a massive refactor because before well uh all the code was squeezed in one file 😅 which was not the best so now it's a little more organized, but *MORE IMPORTANTLY: it's now virtualized!!! that means only the elements that need to be visible are rendered, which improves performance a ton! it still gets laggy in dense areas (like, you know, right when you load up the website 💀) so i have to work on that but this should make it actually possible to have an infinite number of stuff stuck to the wall (besides database limits and loading the data and a bunch of other stuff i have to fix but WHATEVER it's progress ok) anyways have to do more coding now bye lol
added the ability to stick text!!! also fixed some layout, selection, and light mode bugs i somehow introduced with the last devlog (whoops).
i'm probably going to do a ship right now (early, i know) as an mvp before adding support for other media and other iNteResTIng features later (lol)
now uses FREE openrouter by default, so you don't have to worry about an api key :) if you want even better analysis you can put a gemini key in the environment variables
added the title! there's a really strange overflow bug when the window is too small that i can't figure out, but decided to ship anyway until i figure it out
missing time (better devlogs coming soon lol)
missing time
buttons redesign! little more intuitive now
small layout fixes and readme updates
number of magazines (should have thought of this earlier lol)
the number of pages now shows! more stats coming soon
export options!! they even have tooltips (you'll have to open it yourself to see them tho)
added a close button so you don't have to refresh
added a title so you can see what files you analyzed :)
more stripping back, also a new example
started work on a big cleanup, the code is much cleaner now but i also lost half of the features 💀 next step is finishing the restructure and adding back features
added number of pages to analysis! things are getting pretty messy though so i'm going to restructure analysis to be much more flexible so i can add more detail
...and finally fixed a few export bugs and focus/accessibility issues
you can now print as a pdf!
added some export options (copy/download)
added an example so you don't need an api key to see it in action :)
added a hackatime badge for good measure (lol)
...and a quick update to the readme image :)
you can now see what files you uploaded! plus some other small fixes and tweaks (analysis is now lowercase to match everything else)
fixed some layout bugs, changed the selection color, and made sure everything is disabled when form submission is pending/the analysis is being generated
added a favicon and a little footer :)
made a bunch of little changes and cleanups
a title so the tab doesn't look so ugly (too lazy to find a favicon lol)
fixed the readme so it's actually ship compliant (whoops)
did a ton of cleanup for proper typesafety/form validation/whatever so the project is nice and shiny now (lol)
switched to gemini for better analysis and higher context window
Played around with the system prompt until I got something that looks clean (besides the hallucinations, anyway). This analysis is okay, but I'm hoping to include some more specific insights and generative UI so this actually a cool project instead of a wrapper.
Made a ton of progress! The app is now functional and outputs some really basic insights from the magazines you upload. It's also now deployed at <aarvinroshin.github.io/printr>! Now all I have to do is make it actually useful :)
An actual UI! Still doesn't do anything, though.
Base shell, as always (Vite + React + Tailwind CSS).
Convex is set up, and basic authentication through Google as well.
Here's the landing splash! I found some cool fonts that I'll make use of throughout the game...
Base UI implemented! Got stuck because of a random Rust security issue, but it ended up being unimportant.
Vite, Tauri, and TailwindCSS set up! It feels weird having a Vite app with more Rust than JavaScript.
Deployment successful! It only took three commits fighting with CI 🤭. You can check it out now aarvinroshin.github.io/topick!
So far, I've implemented server components and am halfway through base support for client components. Next on the list are proper utilities for client components (like event listeners and effects), reactive state (signals if I can figure them out), and eventually server actions (RPC) for some real power. Here's a simple demo (check the repo!):
This was widely regarded as a great move by everyone.