I’ve bootstrapped more of the project, added scoped API keys, etc
Log in to leave a comment
I spent forever fixing a bug that I introduced in a previous commit that was meant to FIX bugs lmfao
Log in to leave a comment
I’ve added a stats display to the llm’s response message. (tokens per second, time to first token, etc)
Also made a bunch of minor ui changes/fixes
Log in to leave a comment
Made stream resume more robust and also made the optimistic message sending even faster
Log in to leave a comment
Finally tracked down the source of the error over to better-auth… This marks the fourth issue i’ve encountered with better-auth in my time using it that’s taken over 4h to debug.
(The record is https://github.com/better-auth/better-auth/pull/4724, which took well over 10 hours)
Log in to leave a comment
I’ve decided to migrate to tanstack start. This is because the app is mostly run fully client-side, and I want a better client-side routing experience. The only real next features I use are server actions and api endpoints.
Currently dealing with a weird bug: https://github.com/TanStack/router/issues/5196
Log in to leave a comment
Fixed an issue with create-turbo-kit not being able to run with npm.
To my reviewer, please make sure you are on node 22 and npm 10.9 (or use pnpm :D)
Also this devlog re-logs the 7h of work that was in my first devlog that got unlogged for some reason
Log in to leave a comment
I actually managed to do it… I optimized the send message latency from ~750ms to ~130ms! And on top of that, I implemented optimistic updates. Little writeup on what I actually did (copy-pasted from discord):
i rewrote the backend, the bottleneck was I was inserting sequentially as it’s basically a tree, and i need a parent node’s id before i can insert a child node
the solution i came up with is so dumb
basically I don’t want the client (browser) to control the id I give to threads and messages, as that allows for the user to supply basically whatever string they want
so I instead generate 3 ids, and I cryptographically sign them so I can “attest” to them being truly random. These ids are then passed to the client on page load (and regenerated on-demand)
then when the message is sent to the database (convex), it validates the signature and inserts the required rows with the ids that the client already knows about
all of this is so that when enter is pressed, the client already knows the ids of the thread and the message, so it can optimistically route to /chat/ and add their message onto the screen, making it look faster
tl;dr: I did some dumb sh*t with pregenerating ids on the server to make the browser redirect and show stuff faster before the rows are inserted in the database
Log in to leave a comment
*I also shaved about 100ms off from the latency by modifying my auth system for convex functions to instead check the user’s jwt and not try to read their user record from the db on every request
Everything works, but it isn’t fast enough. At least it doesn’t look fast enough. Apps like t3.chat optimistically route the user to a new chat before it’s even created, so i’m going to do that too. However you can’t trust data created by the client, so i’m having the server generate and sign a id on page load, and that signed id is validated by convex when a message is sent, so the client and optimistically route itself to the new chat page before its even created.
PS. Antigravity sucks cursor GAPS it
Log in to leave a comment
My initial implementation of resumable streams was flawed and did not properly work. I spent two entire days debugging it and fixing it. Now it works!!
Log in to leave a comment
I’ve implemented a chat message input bar. It has token estimation, and a feature that highlights tokens. Additionally, any important chat state (i.e submitted, generating, error) is shown in the border of the chat input.
Log in to leave a comment
Did a bunch of work on basically everything, including the database schema, auth, and implemented the backend functions and routes, with resumable streams!
https://github.com/vercel/resumable-stream
Log in to leave a comment
I’ve implemented a core layout, and spent most of the time building the sidebar. It uses tanstack virtual lists (https://tanstack.com/virtual/latest) to dynamically load the chat history from convex.
Log in to leave a comment
Spent a bunch of time debugging weird issues with turborepo, and getting convex to work properly with better-auth (https://labs.convex.dev/better-auth/features/local-install)
Starting to think I should have gone with what i’m usually used to working with (postgres), or using something like clerk/workos
Log in to leave a comment
Spent nearly 4 hours figuring out convex and setting it up in a turborepo with better-auth. It finally works!
Currently trying to figure out whether to use convex ents
Log in to leave a comment
I’ve added more images to the blog post, and also implemented an image carousel
Log in to leave a comment
I’ve added a tech stack section, and completed the blog post that I never finished
Log in to leave a comment
Read it at https://evanyu.dev/blog/calhacks-12 !
Wrote some docs on the docker containers provided, added react-email (https://react.email/), and bumped next to version 16.1.0
The scaffold script now supports automatically removing unused dependencies
Log in to leave a comment
Had an LLM adapt my readme into a format suitable for documentation, made some changes and it’s now live:
https://turbo-kit.badbird.dev/docs/getting-started
Log in to leave a comment
I built out the docs section on the website, it uses contentful, mdx, tailwind typography, and rehype-pretty-code for code highlighting.
I’ve also added redis to the template, and a types package, exporting all db types there.
I built a landing page with nextjs for the template, it’s deployed at https://turbo-kit.badbird.dev/
Log in to leave a comment
I’ve bootstrapped a new project off of create-t3-turbo, built a CLI to bootstrap a new project (with docker!), and started on building out the features I need on turbo-kit. This includes fixes for multiple bugs with tRPC + better auth, and the shadcn/ui CLI for monorepos
Log in to leave a comment