architecture

One-Tap Generation and Per-Story Payment — From Subscription to Single Payment

Storybooks Are Not Made Monthly Monthly subscription models have a premise: users return every month. AI storybook generation does not fit this premise. Storybooks are made for birthdays, anniversaries, special...

architecture

Social Sharing Pipeline — From SSR Share Pages to a Viral Loop

Gallery Exists, Users Do Not The AI storybook generation pipeline is complete. A public gallery is built. One thing is missing: a structure where results bring the next user. We...

design

From 9 Settings to 3 — Redesigning the AI Creation Page UX

Nine settings, zero creations The AI storybook creation page had nine settings. Writing style, art style, three character slots, content type, image ratio, image mode, scene count, characters per scene,...

architecture

Content Type Expansion — From Fairy Tales to a General Creative Platform

The Problem: “Fairy Tale” Hardcoded in 30 Places The service launched as a children’s storybook creator. “fairy tale,” “children,” and “children’s book” were embedded in 30+ locations across the codebase....

macos

JenaImage — A macOS Image Viewer That Eliminates the Finder-Preview Gap

Managing images requires two apps Browse folders. Finder. View an image. Preview. Move to another folder. Back to Finder. Convert the format. Yet another app. Image work always bounces between...

macos

JenaNote — Building a WYSIWYG Markdown Editor with NSDocument

An editor where markdown symbols disappear Type **bold** and the asterisks vanish. Only bold remains. Type # Heading and the hash disappears. A large heading appears. Save the file. It...

macos

jenaMemory — Building a macOS Menu Bar App Without Xcode

A number in the menu bar A single number appears in the macOS menu bar. Free memory percentage. Updates every two seconds. Click for detailed stats. Click again to flush...

infrastructure

Cloudflare R2 Migration and Scheduler Modularization

Two changes shipped on the same day. R2 migration for storage costs. Scheduler modularization to make the migration manageable. They reinforced each other. Part 1: Supabase Storage to Cloudflare R2...

business

Token-Based Pricing — Designing an AI SaaS Billing Model

The Problem: AI Costs Vary A 3-scene book and a 20-scene book differ by 7x in AI API cost. “N books per month” fails as a pricing unit because “one...

ai

Multi-Character System — Ensuring Image Consistency with Claude Vision

The Problem: Characters Change Every Page Page 1 shows a brown-haired girl. Page 3 turns her blonde. Page 5 renders a different person entirely. This is a persistent failure mode...

architecture

DB-Based Job Queue — Async Generation System to Bypass Vercel Timeouts

The Problem: 2-4 Minutes of AI Generation Claude writes text. 30 seconds to 1 minute. Gemini draws images. 20-30 seconds per scene, 2 minutes for 5 scenes. Total: 2-4 minutes...

payments

Toss Payments Billing Key — Designing a Subscription Payment System

Subscription Requirements The revenue model is monthly subscriptions. Four requirements. Register a card once. Auto-charge every month. Plan changes trigger immediate payment. Cancellation keeps service active until the current period...

auth

Auth Migration — From Supabase Auth to Firebase Authentication

Why Migrate Storida started with Supabase Auth. DB, Storage, Auth — all on one platform. Then JenaLab’s other services (Armo, Contexta) needed unified authentication. Supabase Auth hit its limits. Firebase...

ai

AI Prompt Engineering — Dynamic Prompt System and AI Analysis Pipeline

The Problem: Hardcoded Prompts Prompts change constantly in an AI SaaS. Adjust the tone. Fix a constraint. Add a new style. Every change required a code deployment. The operations team...

database

Drizzle ORM + Supabase — A Production-Safe DB Workflow

The Problem: ORM Migration Risk You add a column to a production database. The auto-migration tool executes unexpected SQL. The service goes down. Schema changes are the most nerve-wracking moment...

architecture

Storida System Architecture — Monorepo Design for AI SaaS

Background Enter a character name and a situation. Get a storybook. Claude writes the text. Gemini draws the illustrations. Storida automates that pipeline as an AI SaaS product. This post...