JenaLab Technical Blog
AI SaaS, macOS 네이티브 앱, 시스템 아키텍처에 대한 기술 블로그. Storida, jenaMemory, JenaNote, JenaImage 프로젝트의 설계와 구현을 다룹니다.
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...
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...
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,...
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....
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...
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...
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...
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...
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...
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...
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...
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 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 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...
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...
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...