How a solo developer runs 18 services — mrlatte.net's setup, as its own service pages describe it
How one developer runs 18 services at mrlatte.net, as its own pages describe it: Firebase, Astro static builds and a 03:00 crawl scheduler.
On this page
The front page of mrlatte.net (라떼군 이야기, “Mr. Latte’s Story”) shows these figures: "18 products launched in-house, 80+ projects participated in, since 2002" (our translation). They are very different products: stock discovery, career reports, a rich-text editor, a mind-map editor, a widget workshop, a game magazine and a comics webzine. The site presents all eighteen as built and run by a single freelancer (whether it is really one person is covered in Section 9). How this works is documented not in an interview but on the eighteen service description pages: each page records its infrastructure, automation, payments, what was given up and what would be done differently, in the same format. On 2026-09-19 we read every one of those pages, compared them with HTTP response headers, and pulled out five recurring structures. Links to all 18 services are in Section 2.
1. Executive summary
mrlatte.net service list [1]
2 of them name the project
mrlatte [5][8]Libsac's two schedulers, Korea Standard Time (KST) [5]
First, a disclosure of interest. Eazler, which publishes this article, is a company where, according to the mrlatte.net About page, the operator worked as an executive and developer from August 2015 to December 2016 [2]. We wrote this article from public pages only, without asking the operator anything, and the operator did not review it.
Some terms. Static site generation (SSG) means building the HTML files in advance, at build time, instead of having a server generate each page when a request arrives. Firestore is Google Firebase's document database; a single project can hold several named databases. Firebase Hosting deploys static files, and Firebase App Hosting deploys apps that need server rendering. Credits are the shared in-app points used across this family of services to unlock paid features; we follow the operator's own term for them.
The figures and quotations in this article are as they appear on mrlatte.net's pages (quotations are our translations from Korean). The response headers and HTML traces are what we checked ourselves on 2026-09-19. We did no performance measurements of our own.
2. What it runs: all 18 services
These are the 18 services on mrlatte.net's service list page [1]. We condensed the first paragraph of each description page into one line, and for languages and revenue mechanisms we included only what each page states. The service name links to the live service; the "Page" link goes to its description page on mrlatte.net.
| Service | What it is | Languages | Revenue mechanism | Description page |
|---|---|---|---|---|
| InverseOne Fintech | Every day, ranks stocks in the Korean and US markets that are expected to rise, by an expectation score, and publishes the reasoning. States that it is "an estimated indicator, not investment advice" | ko·en | Only the in-depth fund-flow trends are unlocked with credits | Page |
| Reputo Education | A career guide that presents each occupation as a report on six axes: fit, roadmap, study, reality, skills and resources | ko·en·ja·zh-cn·zh-tw | Reports are free; saved plans, matching and sessions with people working in the job are on a Plus subscription | Page |
| StartupXO Insights | A site that connects startup and investment news, ideas, talent and hiring through a single search box | Pages in 5 languages, news articles in 3 | Free to read; account sync and private notes are on a Plus subscription | Page |
| Typdit Productivity | A web rich-text editor built on its own editing engine, with no external editor library. Embeds in other sites with one line of script | 5 locales | Up to 20 documents free; site embedding and higher tiers by subscription | Page |
| DeepThought Productivity | A browser-based editor for reading annotated mind maps, copying (forking) them and continuing to draw. No AI assistance in the editor | ko·en·ja·zh-cn·zh-tw | In-depth annotations (deep maps) cost credits; file export is Plus | Page |
| BootSignal Developer tools | A catalog of embeddable widgets such as countdowns, notice bars, comments and star ratings, plus free visitor tools such as QR codes and D-Day counters | ko·en·ja·zh-cn·zh-tw | $20 a month or $200 a year; one subscription covers every widget on one domain | Page |
| Out of Stealth Showcase | A discovery radar that automatically finds new products on Hacker News, Product Hunt and GitHub Trending and fills up every day | ko·en·ja·zh-cn | Not stated on the page | Page |
| DoYouBox Social | A viral quiz platform for teens and people in their twenties: personality quizzes and "balance games" (would-you-rather dilemmas), designed to spread through messenger sharing | ko·en·ja·zh | Ads and sponsored quizzes, ads on result pages | Page |
| Forkarium Social | A social wiki that remembers how people, works, companies and places are connected. Keeps verified facts, links for which a person wrote down the reason, and machine-extracted candidates apart | Not stated on the page | Not stated on the page | Page |
| Bunnkr Media | Watch auto-playing channels on a retro TV inside a pastel isometric mini-room. A screen you leave on instead of choosing what to watch | ko·en·ja (per hreflang) | Credits mentioned | Page |
| GameSnapshots Gaming | A game review and news magazine with an attached card draw and market for original art of the same games. Fully rebuilt on 2026-08-22 | ko·en·ja·zh-cn·zh-tw | 1 credit per card, one free card a day | Page |
| Hizine Travel | A free guide that links filming locations of movies, TV dramas and music videos to photos, maps and visitor information. No locked pages | 8 languages (the figure on the list page) | Free | Page |
| Libsac Platform | A curation platform that gathers information with a deadline, such as contests, events, performances and talks, and sorts it by days remaining (D-day) | Korean (deliberately the only language) | Credits and sponsor tiers mentioned | Page |
| Don't Panic Korea Hub | A handbook for foreigners who have come to Korea: visas, housing, banking, phone service, healthcare and administration. A nine-part structure written and reviewed by people | en·ja (per hreflang) | Ads mentioned | Page |
| Bessatsu Content | A free webzine that gathers webtoons, manga and anime by crawling and introduces them (the main magazine), plus a weekly original visual series (the supplement) | ko·en·ja·zh-cn·zh-tw | The first 6 pages of each supplement are public; subscribers get the ending, the originals and back issues | Page |
| Weple B2B | The family's contract-development storefront. Builds with "the stack proven by building and running 18 services first-hand (Astro/React/Firebase/Expo)" | Landing page in 9 languages | Published prices, such as short tasks from ₩100,000 (KRW) each and managed maintenance at ₩100,000 (KRW) a month | Page |
| Pawtelier Media · archived | A mobile app that turns 1–4 pet photos into a classical portrait in a painted gilt frame. Six painting styles | ko·en·ja | Not stated on the page | Page |
| ToonBooth Media · archived | A mobile app that turns 1–4 photos into a four-panel caricature strip in a black-and-white webtoon style | ko·en·ja | Credits mentioned | Page |
16 of the 18 are marked "running," and the two mobile apps, Pawtelier and ToonBooth, are marked "archived," so for those we link only to the description pages. Weple is a contract-work storefront rather than a product, but the operator counts it among the 18, so we kept it. "Per hreflang" in the languages column means the description page gives no language list, so we checked the live service's hreflang tags.
3. One set of infrastructure: a database per service on the same Firebase
The Weple page states the stack in one line: "the stack proven by building and running 18 services first-hand (Astro/React/Firebase/Expo)" [4]. The "current status and operating signals" section of each service page is more specific.
| Service | Infrastructure as stated on the page | Start |
|---|---|---|
| Libsac | "A serverless structure with no separate server: Firebase Firestore (named DB libsac) + Firebase Storage + Firebase Hosting (project mrlatte, site libsac); deployment via GitHub Actions" | First launched on Next.js in 2025-10, later rebuilt on Astro static builds + Firebase |
| DeepThought | "Firebase (Auth + named Firestore DB deepthought + App Hosting backend deepthought, project mrlatte)" | 2026-02, Astro + React + Firebase |
| Typdit | "Firebase App Hosting (typdit.com) + a Firestore database dedicated to the service + object storage" | First launched 2026-02, redefined 2026-08 |
| Reputo | "Static pages on Firebase Hosting, one named Firestore DB, a Python content pipeline. Career-matching decisions are made by a Cloud Function in the mrlatte repo" | Pipeline 2025-09, official launch 2026-01 |
| StartupXO | "Static pages on Firebase Hosting, two Firestore databases. No separate API server" | Page dated 2026-04-30 |
| Out of Stealth | "Astro + Firestore (named DB ooskr), build-time static SEO" | Started 2026-05, launched 2026-06 |
The six pages point the same way. All six services that disclose their infrastructure use Firebase, and two pages, Libsac and DeepThought, name the project mrlatte. The pages do not say whether the other services sit in the same project, so that part is our inference. What they have in common is that each service gets one named Firestore database and one hosting site. Services for which static pages are enough go on Firebase Hosting; services that need state after login go on App Hosting. Deployment is via GitHub Actions. Launching another service then means not "standing up new infrastructure" but "attaching one more database and hosting site to the same template."
What we checked in the response headers fits the same picture. Of 17 live domains, 12 returned server: envoy and via: 1.1 google. The other 5 returned Fastly-style cache headers (x-served-by: cache-icn…): mrlatte.net, startupxo.com, reputo.net, bunn.kr and theweple.com. StartupXO and Reputo, whose pages say "static pages on Firebase Hosting," are in the second group; Typdit and DeepThought, whose pages say "App Hosting," are in the first. Whether the two header patterns correspond directly to Firebase Hosting and App Hosting is our inference, and nothing we found contradicted what the pages state. In the HTML, 6 sites had Astro island markup, and Forkarium showed traces of Next.js.
4. Static first: an early-morning scheduler instead of a server
The word the service pages use most often is "static." When we saved the text of all 18 pages and counted, it appeared 50 times. Instead of a server doing work on every request, the data is baked into HTML at build time and the site is rebuilt once a day. The Libsac page gives both the reason and the structure.
The same principle appears in other services. StartupXO calls its approach "serverless search": "the browser searches data that was baked into the pages during the build, finding news, ideas and talent all at once" [7]. DeepThought's published maps are indexed by search engines through prerendered static pages and a sitemap, and in the page's words they serve as "a visual table of contents for the family's AI/tech insights and an internal SEO hub" [8]. Reputo lists "real-time recommendations / an algorithmic feed (to keep the strengths of a static site)" under "what I gave up" [9].
Static-first goes together with multilingual pages. Instead of choosing the language on the server, the sites split languages by path, such as /ko /en /ja /zh, and the build checks the language files. Reputo writes, "No page passes the build unless all five language files exist" [9]. The hreflang tags we checked numbered 5 each for GameSnapshots and Bessatsu, 5 for DeepThought (including a duplicated Chinese variant), 5 for DoYouBox and 9 for Weple. Libsac, by contrast, says it "deliberately has no multilingual support or language switcher, because events, contests and performances are domestic information" [5]. Multilingual is the default, but the audience comes before the principle.
5. AI for production and judgment: people review the sentences that reach the screen
The About page says: "I use AI to fit the purpose. Not because it is trendy, but when it raises real user value" [2]. The service pages show that, in practice, AI plays two roles. One is a production pipeline for output at a scale no person could write by hand, such as multilingual reports, with the operator reviewing the results. The other is a judge that produces no sentences for the screen. There is no AI inside the editors that users work in.
| Service | What AI does | What people do | Source |
|---|---|---|---|
| Reputo | "A single Anthropic Claude API call handles research, body text in 5 languages and recommendations through step-by-step prompts," and content_checker.py checks for gaps across the 5 languages and validates links. The design requirement: "one person must be able to maintain a 5-language content matrix" | "The operator does only the review." New books are first checked to confirm they exist | [9] |
| StartupXO | The model that scans notes "returns only item numbers" | "Every sentence shown on screen has been edited by hand in 5 languages, so there is no room for invented figures or translationese" | [7] |
| Libsac | gpt-4o-mini normalizes crawled event information | Scheduler design, source selection | [5] |
| Out of Stealth | An automated discovery pipeline: "crawl trending sources → quality gate → multilingual descriptions → listing" | On 2026-07-01 the AI tool comparison directory was "removed entirely on the operator's instruction"; old URLs return 301 | [10] |
| DeepThought | The content workflow writes summaries (briefs) from maps that passed a review step ("round gate," in the page's words) and publishes them | The editor is "keyboard-centered manual editing, with no AI assistance." Editor AI removed entirely on 2026-06-29 | [8] |
| GameSnapshots | The operator makes the card and hero art with Midjourney: "atmospheric world illustrations with no game names, characters or trademarks" | Tier, draw and trading rules; reviews in 5 languages | [11] |
| Bessatsu | The main magazine is collected by crawling | The supplement is "made directly by the operator," once a week | [12] |
Two cases show the direction. StartupXO's retrospective says: "If I did it again: I regret starting the ideas with auto-generation. The volume went up, but there was little reason to read them" [7]. DeepThought writes that "the editor came back to life by solving the blank-canvas problem with publications worth reading, not with AI," and lists removing the AI it had attached to the editor under "if I did it again" [8]. Rather than using more AI everywhere, the person running eighteen services has been removing it from the places users touch directly. What remains is mass production with review behind it, and tasks such as translation, normalization, judgment and validation, where mistakes can be caught mechanically.
Model choices are practical too. Reputo puts "self-hosting an LLM (external APIs win on both cost and quality)" on its gave-up list [9], and Libsac uses a model from the cheapest tier for normalization [5]. This is the same reasoning as the judgment-only model we covered earlier on this blog. Tasks whose answers have a fixed format do not need a large model.
6. A family of services that feed each other: shared accounts, credits, cross-links
The pages call the eighteen "the Mr. Latte family" (8 times, counted the same way). According to the pages, the family shares three things, not just a name.
- A shared account and payment hub. BootSignal's payments are "taken through Polar, and checkout goes through
accounts.mrlatte.net" [6]. Typdit's higher tiers are also "processed as subscription products of an external payment provider via the family's shared account hub, and a webhook updates the plan field in each service's user document. Instead of building new payment infrastructure, the existing one was reused" [13]. In other words, a webhook that receives the payment notification changes the plan field in the user's document for that service. BootSignal says it uses "login (a shared Google account), saving and multilingual features without a separate build or backend" [6]. As of 2026-09-19, when we checked,accounts.mrlatte.netreturned 200. - A shared credit economy. DeepThought writes, "The shared credit economy is linked across the whole mrlatte family" [8]. InverseOne, when it added charges for unlocking stocks, wrote that it "reused the payment code from the game flow (no new payment code)" [14]. Credits also appear on the GameSnapshots, Bunnkr, Libsac and ToonBooth pages. In effect, the services that use credits share one wallet, and some services, such as Weple, have nothing to do with credits.
- Cross-links and division of roles. DoYouBox lists among its revenue mechanisms "natural links from the quiz flow to related services (including the family)" [15], and DeepThought tracks "internal referrals to the family's insights (especially startupxo)" as a monitoring metric [8]. The AI prompt market that used to be part of Out of Stealth was split off and moved to BootSignal [10]. When we scanned the live HTML, BootSignal was mentioned on 8 of the 17 domains, and mrlatte on 8.
The revenue model also comes down to one line: reading is free; only tools that stay with your account are paid. StartupXO writes, "If reading were locked, the reason this site exists would disappear" [7], and Reputo puts "a reading paywall (the SEO funnel and affiliate revenue come from the free reports)" on its gave-up list [9]. BootSignal has a single price, and "the subscription check looks only at the expiry date, not the widget name, so no extra fee applies as the catalog grows" [6]. The design removes the work of managing a price list altogether.
7. Recording every reorganization: what worked, if I did it again, what I gave up
All eighteen pages use the same sections: positioning; market and problem definition; core target users; value proposition; revenue; current status and operating signals; retrospective and next hypotheses. In particular, the three slots "what worked / if I did it again / what I gave up" are filled in for every service, and decisions carry dates. Picking out only the reorganizations recorded in 2026 gives this:
| When | Service | What changed |
|---|---|---|
| 2025-10 → later | Libsac | After the first launch on Next.js, rebuilt on Astro static builds + Firebase [5] |
| 2026-06-29 | DeepThought | AI attached to the editor removed entirely, over "model downloads, cost" [8] |
| 2026-07-01 | Out of Stealth | AI tool comparison directory removed entirely, old URLs 301-redirected. "New-product discovery is the single core" [10] |
| 2026-07 | InverseOne | Home page reorganized from a fund-flow tracker into a product for "finding stocks expected to rise"; verification lounge added on July 2 [14] |
| 2026-08 | Typdit | Redefined from a typing record-and-replay service into a pure editor service: "folding up the recording and replay axis" [13] |
| 2026-08-22 | GameSnapshots | Fully rebuilt as a magazine plus card draws [11] |
| 2026-08-23 | DeepThought | The operator confirmed that "reading and continuing to draw are a pair, and the editor is the core" [8] |
The retrospectives record failures too. Typdit's "if I did it again" reads: "When changing the nature of the service, I would have tied the cleanup of old pages and the publishing of new pages into the same sequence. Right after the cutover, the leftover old pages were briefly out of step in search results and internal links" [13]. The operator's blog post of 2026-09-01 shows where this habit comes from. It calls a day "a deploy with no rollback" and says to "record what changed, like a commit message" [3]. The person running eighteen services relies on documents, not on memory. And because those documents are public, this article was possible.
8. What a one-person studio can take away today
- Extract a template from your first service before launching the second. One project, a database and a site per service, the same deployment pipeline. Only if the second can ship "without new infrastructure" will there be a third.
- Serve as static files whatever can be served as static files. Rebuild information that only needs a daily refresh with an early-morning scheduler. No server means no server outages to respond to. If, like Reputo, you put "real-time feed" on your gave-up list, you will not waver when feature requests arrive.
- Put AI only where a review follows it. Give mass production a review step, and limit judgment roles to tasks where mistakes are caught mechanically, such as translation, normalization, classification and checks for missing items. Keep it out of the editors that users work in directly.
- Let the build check completeness. A build that passes only when all five language files exist is more reliable than human memory.
- Build accounts, payments and points once. Route payments through a hub instead of adding a new payment setup to each service. Keep to a single price where possible, with a check that looks only at the expiry date.
- Keep reading open and sell only tools. If a service's search traffic comes from its free pages, a paywall cuts off that traffic.
- For each service, write down "what worked / if I did it again / what I gave up," with dates. That is where you learn how much you can delete when you reorganize. Made public, it also helps in client quotes and hiring conversations.
- To build a family, share the wallet (accounts and credits) before the brand. Cross-links can be added later, but merging credits and accounts later is a migration.
9. What this is not yet
- All the evidence is pages written by the operator. The infrastructure, automation and retrospectives are the operator's own description, not something we confirmed through code or dashboards. The only things we checked independently are response headers, HTML traces,
hreflangtags and whether the domains respond. - There are no performance figures. Traffic, revenue, subscribers and time invested appear on none of the pages. This article only sets out "how it runs," and makes no judgment on "whether it runs well."
- We could not confirm that it really is one person. "Solo" in the title follows the operator's own description. The Libsac and Reputo pages say "one-person operation," but the Weple page also uses the phrase "small team." How much outside collaboration is involved is unknown.
- The hosting inference comes from header patterns. We read the Fastly-style headers as Firebase Hosting and the Google front-end headers as App Hosting, and this did not contradict what the pages say, but headers alone do not settle it.
- Launch dates mix page dates and dates in the body text. Three services have the same page date, 2024-01-01, so we did not use it as a launch date. The "Start" column in the table includes only what the body text states.
- There is a conflict of interest. The operator worked at Eazler, this blog's publisher, in 2015–2016. We did not ask the operator anything, and the operator did not review the article before publication.
- The pages change often. Seven reorganizations are recorded in 2026 alone. The quotations here reflect the wording as of 2026-09-19, and the linked content may change.
- Limits to generalizing. This structure is suited to content, curation and tool services. There is no evidence that the same template fits services that need real-time collaboration or high transaction throughput. The operator also put "real-time collaboration" on DeepThought's gave-up list.
10. Sources
All checked on 2026-09-19. [1]–[15] are mrlatte.net pages in which the operator describes their own services, so they are not neutral sources. We checked the response headers and HTML traces ourselves.
| Source | What we checked | Scope of the evidence |
|---|---|---|
| [1] mrlatte.net · Services · Home | The list of 18 services and their status; the figures on the home page (18 / 80+ / 4 / 2002) | Operator's page |
| [2] mrlatte.net · About · English version | Career (Comcast Korea · ESTsoft · Eazler · PuzzleVentures · freelance), principles ("redefine the problem first," "use AI to fit the purpose") | Operator's page |
| [3] mrlatte.net · 나의 하루는 얼마의 가치가 있을까? (“What is my day worth?”, 2026-09-01) | "A day is a deploy with no rollback"; the principle of recording what changed, like a commit message | Operator's blog |
| [4] Weple description page · Work With Me | "Proven stack (Astro/React/Firebase/Expo)", 9 languages, published price list | Operator's page |
| [5] Libsac description page | Serverless structure, project mrlatte, 03:00 crawl and 04:00 rebuild, gpt-4o-mini normalization, the single-language decision, the Next.js→Astro rebuild | Operator's page |
| [6] BootSignal description page | Pricing ($20 a month, $200 a year), Polar payments via accounts.mrlatte.net, shared Google login, expiry-date-only check | Operator's page |
| [7] StartupXO description page | Serverless search, Firebase Hosting + two Firestore databases, "only item numbers", the free-reading principle, the retrospective on auto-generated ideas | Operator's page |
| [8] DeepThought description page | App Hosting backend, static prerender + sitemap, shared credit economy, editor AI removed (2026-06-29), operator's confirmation (2026-08-23), round gate | Operator's page |
| [9] Reputo description page | runner.py and the Claude API pipeline, content_checker.py, the five-language build gate, gave-up list (real-time recommendations, self-hosted LLM, reading paywall), Cloud Function | Operator's page |
| [10] Out of Stealth description page | Automated discovery pipeline, removal of the AI tool directory and 301s on 2026-07-01, the prompt market moved to BootSignal, Astro + Firestore ooskr | Operator's page |
| [11] GameSnapshots description page | 2026-08-22 rebuild, 5 languages, original Midjourney art, credit rules | Operator's page |
| [12] Bessatsu description page | Main magazine by crawling, weekly supplement made by the operator, subscription model with the first 6 pages public | Operator's page |
| [13] Typdit description page | Own editor core, App Hosting, 2026-08 redefinition, payments via the shared account hub and a webhook, cutover retrospective | Operator's page |
| [14] InverseOne description page | 2026-07 reorganization, credit unlocks, "reused the payment code from the game flow", not-investment-advice notice | Operator's page |
| [15] DoYouBox description page and the remaining service pages | Routing in 4 languages, family cross-links, ad model. The other rows of the Section 2 table come from the first paragraph of each description page | Operator's page |
| [16] Our own checks (2026-09-19) | Response headers from 17 domains (envoy/google on 12, Fastly-style on 5). Astro island markup on 6, Next.js on 1. hreflang tags. accounts.mrlatte.net returning 200. Word frequencies counted from the saved text of the 18 pages | Our own check. Reading the headers is inference |
Editorial standard: in every table we kept the operator's self-description apart from what we checked ourselves, and we wrote no sentences about performance. We disclosed the past relationship between the publisher and the operator at the start of the article.