Devlog · Tiglit

Tiglit: From "Real Tamagotchi" to a Tiger Cub, Forced by Apple

PJ By PJ Geldenhuis · July 15, 2026 · 14 min read · Live · tiglit.com

How this was put together: a chronological reconstruction from session transcripts and repo file timestamps, covering roughly June 2 – July 15, 2026. Where an exact date isn't available, that's noted. This is not a highlight reel — it includes the dead ends, the misdiagnoses, and the money burned.

Key milestones

Tiglit — a tiger cub mascot for gentle, research-backed toddler tools
The Tiglit "CubMark" — the mascot that replaced an egg-and-hamster concept after an Apple trademark rejection forced a full rebrand.
tiglit.com
Tiglit live homepage screenshot
The live homepage today, July 15.

The tool stack, end to end

Framework / HostNext.jsVercel
AuthClerk (web)Custom JWT (iOS)
DatabaseSupabase
PaymentsStripe
AIClaude — behavior analyzer, Story Studio, fact-checkerGemini/Lyria (song audio only)
CommsResend (email)Twilio (SMS alerts)
Native appSwiftUI, own repo outside cloud sync
GrowthInVideo AI (Reels)Impact / PartnerStack (affiliates)X (@tiglitapp)

Before the beginning: what "day one" actually looked like

The earliest available sessions are all labeled "Toddler advice app" — but even the earliest one already shows a fully working product called Real Tamagotchi: a live app with sign-in, a database, payments, and a Claude-powered "describe your toddler's behavior, get research-backed advice" engine already functioning, mid-conversation confirming a real $49 lifetime-plan payment had just succeeded. Whatever conversation produced the original idea and the first working build isn't in any retrievable transcript. The best available anchor for "day one" is the repo itself, timestamped June 2, 2026 — that's the date this devlog treats as the effective start.

Phase 1 — Core build-out: logo, payments, and the first real feature fights

By the earliest readable point, the app already had sign-in, a user/history system, subscriptions, and a Claude-based behavior analyzer with voice, text, and video input. Real bugs surfaced by actual use, not code review: a usage counter that didn't decrement, a sign-out link pointing at a route that didn't exist, verification emails landing in spam, a speech-recognition API that silently stopped listening after a few seconds.

The mascot went through several complete redesigns in this window — a glossy lavender egg with a cartoon hatchling face, then a baby silhouette inside the egg — before being abandoned entirely. None of it survived to the current brand.

A whole session died mid-task on a hard usage-limit error and never recovered. The fix that came out of that dead end mattered more than the loss: a memory file, written into the project so a fresh session could pick up the same momentum. That pattern — a memory file plus a copy-paste handoff prompt for the next session — recurs for the rest of the project's life, across web, iOS, and at least one deliberate model switch to manage cost.

Phase 2 — Growth hustle: Reels, an affiliate program, and two audits that found the same bug

An affiliate program for parent-creator influencers shipped, then immediately started collecting spam bot signups — dozens a day, each one burning email-sending reputation. Fixed with a honeypot field and a minimum fill-time check, both failing silently so bots don't adapt.

Two independent UX audits, weeks apart, run by sessions that hadn't seen each other's findings, both rediscovered the same critical bug: the demo's text input unmounted itself the instant you typed a character — silently breaking the single most important conversion path on the site, for weeks, until an agent tried to actually use it like a visitor would. One audit initially flagged a different issue as a P0 retention killer, then walked that back on a second pass with actual code inspection — reported as a correction rather than left as a false alarm.

Phase 3 — Feelings Song, and the deploy saga that wouldn't die

The second tool — an AI-generated song from a child's name, feeling, and lesson — ran into a genuine multi-session ordeal: the project lived in a cloud-synced folder, and that sync's file locking made deployment intermittently hang. This got expensive and confusing enough that a fresh session, on a different model, was brought in cold specifically to re-diagnose from scratch rather than trust the first session's theory — and it found a real root cause the first session had missed. A good example of a second opinion catching what the first one didn't.

Phase 5 — Story Studio: the most-iterated feature by far

Personalized illustrated storybooks absorbed more rework than any other single feature. A root-cause debugging moment worth quoting: a generated story that was nonsensical and about 20 seconds long turned out not to be a prompt-quality problem — it was the app's silent fallback template firing because the story data had failed to parse. An explicit cost callout — burning real money with no working example yet — prompted a guard against re-triggering an identical generation while one was already in progress.

A deep research pass was run before touching prompts again: real research into picture-book craft, child literacy frameworks, and illustration principles, then applied across the prompts. Two more honest bugs: character appearance drifting between pages (fixed by anchoring every page to the cover image), and narration not matching the page on screen (the text-to-speech was literally reading the app's own instruction text aloud).

A "network error 3+ times before it works" complaint got its own dedicated diagnosis: story generation was a single serial request capped at a hard function time limit, and when the story ran long, the code silently made a second full ~40-second call to retry — stacking two long calls inside one budget window. Fixed with a shared generation core, a single larger-budget call, and idempotency tokens so a retry can't create duplicate stories. Honest postscript: the very next real-world test still failed once and needed a retry — reported as "seems more robust," not "fixed."

A physical hardware integration — printing storybook strips from a Bluetooth receipt printer — uncovered a genuine platform wall, not a bug: no browser on iOS supports the needed Bluetooth API, because every iOS browser runs on the same underlying engine. The workaround kept direct printing on Android/desktop and generated a shareable image to hand off to the printer's own app on iOS.

Phase 6 — The iOS app and three rounds with Apple

App Store Connect had a build-selection bug that resisted diagnosis for a long stretch — every uploaded build showed as greyed-out and unselectable, escalating all the way to an actual phone call with the platform's developer support. The root cause was a misconfigured CI workflow setting hidden behind a save button that silently hadn't saved.

Once submitted, three rounds of review followed. The second is the one that mattered most: the app's own name was flagged — a real trademark concern against an existing, well-known toy property the original name referenced. That rejection is the direct, documented trigger for the full rebrand: new name, new tiger-cub mascot, replacing what had, until then, been a hamster-face icon left over from the original concept. The next review dropped that issue entirely, confirming the rebrand cleared it.

Phase 7 — The rebrand itself

Triggered by the trademark rejection, the rebrand touched the domain, the color system, and — expensively — auth. The color system was iterated live and by feel over several rounds: an initial dark-brown chrome read as muddy, replaced with teal chosen specifically as a complementary contrast to the orange tiger cub. Auth broke twice during the domain migration, because production auth keys are domain-locked — switching the primary domain silently issued a brand-new key that had to be manually copied and rebuilt, and a separate OAuth redirect had to be manually updated. Both were diagnosed by reading the live browser console rather than guessing.

Phase 8 — The blog: a fully autonomous, twice-weekly pipeline

Since mid-June, a scheduled task has researched, written, and published a blog post roughly twice a week — deliberately architected to avoid the sync problem entirely by writing straight into a database rather than through git. Each run dedupes against the last 50 posts, searches for a citable current angle from at least two reputable sources, writes 600–1,000 words in a consistent voice, publishes, and verifies the live URL actually renders before reporting done.

Where things stand now: Tiglit is live with six tools, a native iOS app that has cleared two of three known Apple review rounds with a fix drafted for the third, a working affiliate program with basic bot defenses, and a twice-weekly autonomous blog pipeline. The single most consistent thread across the whole history isn't any one feature — it's the repeated need to build continuity infrastructure (memory files, handoff prompts, a dedicated deploy script) to keep a solo builder's momentum going across dozens of sessions, several near-death context errors, one explicit model switch, and a recurring file-sync issue that has, at various points, corrupted source files on disk.

Open issues

  • Apple review cleared: Tiglit is approved and shows Ready for Distribution in App Store Connect
  • The blog automation's own runbook still hard-codes the pre-rebrand name and site — never updated after the Tiglit rename
  • A guest-user Premium-access bug was found and is believed fixed, but was only ever caught by manual testing, not an automated check

Upgrade opportunities

  • Confirm the round-3 fix actually cleared review and the app is live for sale
  • Update the blog runbook to reflect the Tiglit brand throughout
  • Build on today's X launch — the first post/hashtag pattern is proven, now it's a matter of cadence
Today (July 15): Tiglit's X profile went live — avatar, a custom banner built from the CubMark and brand colors, bio, and website link — followed by its first post, tied directly to a real Tiglit blog piece about the Toniebox 2, with hashtags added on request. The scheduled blog task was also updated to produce a ready-to-post X caption alongside every future article, output-only and never auto-posted.
Week of August 2: The rebrand is now complete at the infrastructure level: realtamagotchi.com permanently redirects to tiglit.com, and this week's blog runs confirmed the whole publish pipeline — deploy, revalidation, live page — works end-to-end through the new domain. The blog held its twice-weekly cadence with the two categories alternating as designed: a toy-radar piece on 2026's squishy sensory-toy boom (triple-digit category growth, plus the safety fine print — water beads are a hard no under age three), and a reality-check on colostrum supplements for toddlers, where the honest read is one 57-child trial standing against a wall of inconclusive reviews. Both shipped with ready-to-post X captions, output-only as designed — actually posting them is still a human step.
Week of August 9: The twice-weekly cadence held with the two categories alternating as designed. Monday's toddler-talk piece took on the "favorite parent" phase — new ground for the blog, anchored to a pediatrician-authored article and a peer-reviewed infant-development study rather than parenting-forum folklore. Thursday's reality-check went after TikTok's tart-cherry-juice "nature's melatonin" trend and landed on a mixed verdict, which is the honest one: the melatonin content is real, the studies showing sleep effects were done on adults, there are zero trials in kids, and the AAP specifically advises against the bedtime juice bottle that is exactly how the trend serves it. Both the old domain's redirect and the publish pipeline keep proving themselves — posts go live on tiglit.com with the realtamagotchi.com redirect intact — and both posts shipped with ready-to-post X captions that remain, by design, a human's job to actually post.
Week of August 16: The cadence held, though Monday's slot ran late. Its toy-radar pick is a lesson in checking dates: the first candidate — a counterfeit-toy safety warning — turned out to be a year old, so it was dropped for the genuinely fresh story, the new Tamagotchi Paradise release, which for this brand is about as on-the-nose as a topic gets (the post's honest angle: it may be more for the nostalgic parent than the toddler). Thursday's reality-check took on the viral lost-child tip — shout the child's clothing description, not their name — and returned the series' first outright "legit" verdict, backed by the national missing-children organization's own guidance; a competing viral baby-sleep trend was passed over because reputable coverage was too thin, which is the runbook's pick-a-different-topic rule doing exactly its job. One operational note the runs surfaced: the old domain now hard-redirects everything to tiglit.com, so the publish runbook's verification URLs only pass after following the redirect — a small doc fix now on the list.
Week of August 23: Both slots ran, and the Monday rotation moved on from toy-radar to toddler-talk: why a toddler melts down the second you pick them up from daycare — restraint collapse, timed to the new daycare year. Thursday's reality-check took the back-to-school immune-gummy marketing wave and returned a flat myth verdict, with vitamin D flagged inside the post as the one legitimate exception rather than buried. The dedupe check mattered this time: ten prior reality-checks have circled the supplement aisle, so the post was scoped to the broad gummy-aisle claim none of them had covered, and a viral baby-sleep trend was passed over as infant territory outside the audience. One pipeline gotcha got root-caused and written down: the revalidate endpoint answers a bare POST with a 308 redirect, so the publish step now follows redirects — same family as last week's domain-redirect lesson. Both posts shipped with ready-to-post X captions, which remain a human's job.
Week of September 13: One post on either side of a long quiet. Monday August 24's toy-radar slot took on the AI-toy wave — the safety-testing organizations' own verdict that children under five shouldn't use AI companion toys at all, a topic about as close to home as it gets for a brand named after a Tamagotchi — and per the runbook it shipped as sourced reporting with no verdict field of its own. Then the twice-weekly cadence went silent for three weeks, until today's run fired on a Sunday, noticed unprompted that the last published post was August 24, flagged the schedule gap in its own report, and treated the odd-day start as its Monday slot: a toddler-talk piece on daycare drop-off tears that stop the second the parent leaves, timed to new-daycare September, scoped to stay distinct from the existing pickup-meltdown post (which it links instead), and anchored to AAP guidance plus the cortisol study behind the counterintuitive finding that the loudest criers tend to be the securely attached ones. The ready-to-post X captions from both runs remain, by design, a human's job to actually post.

← Back to the Devlog