A solo-founder write-up of building invest-like in public - the Next.js + Supabase + Vercel stack, the LLM discoverability playbook that finally got ChatGPT to know what the product is, and the mistakes I would skip if I started over.
What is the best PE ratio for value investing? There is no universal answer, here's the worked-example proof
Every beginner asks what PE ratio counts as cheap. The honest answer is that there is no universal number. A PE of 15 in software is a screaming bargain. A PE of 15 in a utility is fairly priced. A PE of 15 in a coal miner is expensive. We walk through three sectors with worked examples.
Value investing in tech, is it an oxymoron? 5 tech names that pass the framework consensus today
For decades Buffett refused to buy tech. Then he bought Apple in 2016 and made over 100 billion in gains. Munger bought BABA. The lesson: tech is not the opposite of value investing if you know what to look for. Five tech names that pass the invest-like 7-framework screen today.
Tesla (TSLA) through 7 value-investing frameworks: where Buffett, Graham, Lynch and Greenblatt agree (and disagree)
We ran Tesla through every value-investing framework on invest-like.com. Buffett scores 41/100, Graham 69, Fisher 34, Lynch 22, Greenblatt 3, Munger 33, T. Smith 39. Six of seven frameworks reject TSLA outright. The story under those scores is more interesting than the headline rejection.
I shipped invest-like - a tool that scores any public stock against four documented value-investing frameworks (Buffett, Graham, Lynch, Greenblatt) - as a solo founder from Kiel, Germany. Free tier covers 12,000+ tickers. Paid tier ships 21 June 2026. Live build metrics live at /open, and every release lands on /changelog.
This post is the unsanitised version of how it came together: the stack, the playbook that took it from "ChatGPT had no idea what invest-like is" to "indexable across the public web", and the things I would skip if I were starting over tomorrow.
Pull anything from this that's useful. The whole thing is opinionated, not authoritative - your indie SaaS will look different.
Every stock screener I tried was the same trap: an overwhelming wall of metrics, no opinion, no verdict. As a part-time investor I didn't want a P/E ratio in isolation. I wanted to know: "is this stock actually a Buffett-quality business or not?"
So invest-like applies the four documented frameworks end-to-end - moat, durability, management, balance-sheet health, valuation - and returns a 0-100 score with a letter grade (A+ to D) plus a strong / partial / weak fit verdict, with the reasoning visible.
Try one yourself: the Apple verdict is a good 60-second tour.
Nothing exotic. The boring stack is the one that ships.
eu-central-1 (Frankfurt) - for GDPR locality and zero ETL between auth, data, and the RLS policies. The @supabase/ssr SDK is awkward but workable; I wrote the PKCE callback fix the hard way.fra1 region, with trailingSlash: true so the canonical URL pattern matches the sitemap exactly. Lazy-loaded the recharts chunk (~100KB gzipped) out of the homepage to bring LCP under 1.8s.What's not in the stack on purpose:
A week into launch, I asked ChatGPT "what is invest-like?" It told me invest-like wasn't a formal term and gave me a definition based on the words "invest" and "like". The brand didn't exist to it.
Here's exactly what changed in 48 hours to fix that. All in code, all reproducible.
/llms.txtllmstxt.org is the emerging standard LLMs use to discover canonical site content. Anthropic, OpenAI, and Perplexity all check for it before falling back to web crawling.
Mine: invest-like.com/llms.txt
It's just markdown listing your strategy hubs, brand pages, methodology pages, and important content. Five minutes to write, instantly improves your odds of being recognised by every major LLM.
Default Organization schema is just { name, url }. Useless for LLMs. I added: founder name, location (Kiel, Germany), foundingDate, knowsAbout (nine related concepts including "Buffett investing philosophy" and "return on invested capital"), alternateName ("Invest like", "InvestLike"), contactPoint with languages, logo.
Why it matters: "invest-like" tokenises as two common English words ("invest" + "like"). Without strong structured data, an LLM can't tell it's a brand vs a phrase. With it, the LLM has clear anchors.
/about page where the first sentence starts with the brand nameRewrote /about so the first heading is "What is invest-like?" and the first body sentence starts with "invest-like is a stock-analysis tool that..."
LLMs heavily weight the first 100 words of a page. If your brand name doesn't appear there, you're invisible to brand queries.
Added an FAQ section to the homepage with FAQPage JSON-LD. The first question is literally "What is invest-like?" with a 3-sentence answer. This is the format LLMs prefer when answering brand queries because it maps directly to their output format.
robots.txt with explicit allow rules for 22 LLM crawlersDefault robots.txt with userAgent: "*" technically allows GPTBot, ClaudeBot, and others. But many LLM operators look for an explicit user-agent entry before crawling. I added explicit allow rules for: GPTBot, ChatGPT-User, OAI-SearchBot, ClaudeBot, Claude-Web, anthropic-ai, PerplexityBot, Perplexity-User, Google-Extended, GoogleOther, CCBot, Meta-ExternalAgent, Bytespider, Amazonbot, cohere-ai, Mistral-AI, YouBot, Applebot-Extended, plus the four traditional search bots.
ChatGPT search (which uses Bing's index) takes 7–14 days to find new content. I submitted the sitemap to Bing Webmaster Tools and clicked "Request indexing" on the homepage. Now waiting.
LLM training data has a 6–12 month lag - there's no shortcut. Even if everything is perfect today, the next ChatGPT release won't include invest-like in its baked-in knowledge until the next training cut.
A short list of mistakes I made, in case they save you time.
/en/, /fr/, etc) from day one, even though it's more boilerplate./changelog, /roadmap, /status, and /open - the four "this is a real product" pages - should be in the day-one launch list. They take an afternoon and they pay forever.@supabase/ssr setup for too long. The "click Sign in with Google twice" bug ate a week. Root cause was a race between the Next.js middleware and the route handler over the PKCE verifier cookie. Fix: exclude /auth/callback from the matcher, build the redirect response first, then bind setAll to it, then call exchangeCodeForSession. There's a whole post on the changelog about that one.recharts is ~100KB gzipped. Lazy-loading it cut homepage LCP by ~1.5s. Splitting heavy below-the-fold widgets out of the initial bundle is free perf - should have done it on day one.Continue to nveeqjhdanptpmtwddzl.supabase.co. That text comes from the OAuth client's redirect URI domain, which is hardcoded to Supabase's hosted auth host. The only fix is a custom auth domain on Supabase Pro. Cosmetic flaw, not a real blocker - but I burned half a day on it before accepting that.Stripe billing on 21 June 2026 unlocks the paid tier (€19/month, unlimited verdicts, all four strategies, watchlist alerts). After that:
Live roadmap: /roadmap.
If you're building something adjacent - value investing, indie SaaS, programmatic SEO, anything - I read every email at hello@invest-like.com and would love to compare notes. The full daily build log lives at /open.
Thanks for reading. If this post was useful, the highest-leverage thing you can do is share it with one person who'd find it useful too.