Journaling works, and everyone quits anyway, because nobody answers back. My wife and I both wanted feedback to keep the daily habit going, so we built the tool we wanted: write an entry, click once, and hear from a persona you created. An expert coach, Aristotle, your favorite fictional character, you at another age.

Skydiary runs in production with billing, passwordless auth, background AI job queues, and Japanese as a first-class locale:

Under the hood
Two design choices carry the product.
First, personas have real memory. Entries are chunked, embedded, and stored as native vectors in the database itself (libSQL F32 blobs, no separate vector store), so a persona commenting on today’s entry retrieves what you wrote weeks ago. Replies are statistically humanized: length drawn from a log-normal distribution, a banned list of LLM cliches, three candidates generated and one picked at random.
Second, the privacy claim is engineering, and the design docs came before the code. A master data key generated client-side, Argon2id key derivation at 1 GiB memory cost, AES-GCM for content, ECDH P-384 for multi-device key exchange, and an initialization-vector column beside every sensitive field in the schema. Set a data password and we cannot read your entries or reset your way into them.


Work quantified
About 15 months of solo build, live in production: Next.js, Prisma on Turso, tRPC, Stripe billing, full English and Japanese locale parity, and a cron-driven AI job queue for embeddings, tagging, and summaries.