If you've worked in tech and watched Silicon Valley, you know it hits surprisingly close to home.
The VCs who love the vision more than the details? Familiar. The pivot meetings where everyone stays optimistic? They happen. Engineers having passionate debates about code style? Guilty.
Every time I rewatch an episode, I recognize moments from my own career. Gavin Belson's corporate speak? I've heard those presentations. The Hooli engineers building ambitious projects? That's just how innovation works. Russ Hanneman's energy at networking events? You've probably met someone similar.
The show ended in 2019, but somehow it captured something timeless about tech culture. So naturally, I decided to honor it the only way I know how: by building something completely unnecessary.
The Premise Nobody Asked For
You know what the world definitely doesn't need? Another quote website. You know what I built anyway? A Silicon Valley quote generator with a brutalist 80s terminal aesthetic that looks like it belongs in a museum exhibit called "Computers Were a Mistake."
Does anyone need daily Gavin Belson wisdom? No (well, maybe). Will this change anyone's life? Absolutely not. Did I deploy it to Google Cloud anyway? You bet.
Welcome to Bachmanity Bytes.
Why Kotlin? Because It's Actually Good
Typically, with a simple web app like this, one would generally reach for JavaScript. Instead, I chose Kotlin because it's genuinely enjoyable to work with. It's like Java went to therapy and came back a better person—all the power, none of the boilerplate.
The stack:
- Kotlin - for that sweet, sweet null safety
- Ktor - because Spring Boot felt like bringing a flamethrower to a candle-lighting ceremony
- Kotlinx Serialization - JSON without wanting to throw my laptop out the window
- Google App Engine - because I wanted to experience the joy of IAM permissions at 11pm
The Architecture (Using That Word Loosely)
┌─────────────────┐ ┌─────────────────┐
│ Ktor Server │ │ Clikt CLI │
├─────────────────┤ ├─────────────────┤
│ /api/daily │ │ daily │
│ /api/random │ │ random │
│ / │ │ serve │
└────────┬────────┘ └────────┬────────┘
│ │
└───────────┬───────────┘
│
┌──────┴──────┐
│ QuoteService │ ──→ 80 quotes of wisdom
└─────────────┘
The daily quote uses LocalDate.now().toEpochDay() % quotes.size to pick a quote. This means everyone gets the same quote each day, which is either a feature or a bug depending on how you look at it. I'm calling it a feature.
Additionally, I wanted to build in the same functionality for the command line.
The CLI Nobody Asked For (But I Built Anyway)
Because a web app wasn't enough over-engineering, I also built a CLI using Clikt. Now you can get Gavin Belson wisdom without ever leaving your terminal.
# Get today's quote
bachmanity-bytes daily
# Feeling chaotic? Random quote
bachmanity-bytes random
# Want episode details? Be verbose about it
bachmanity-bytes daily -v
# Start the web server locally
bachmanity-bytes serve -p 3000
Output looks like this:
"Not hotdog!"
— Jian-Yang
Add the -v flag and you get:
"Not hotdog!"
— Jian-Yang (S4E4)
Is this practical? No. But there's something satisfying about typing bachmanity-bytes random and getting a bit of humor during a frustrating coding session.
The "Design" (Air Quotes Intentional)
I wanted a brutalist 80s aesthetic. You know, the kind of UI that embraces hard edges and terminal vibes.
cssbody {
background: #0a0a0a;
color: #00ff41;
font-family: 'VT323', 'Courier New', monospace;
}
Black background. Neon green text. CRT scanlines. Sharp, clean edges throughout. It looks like what would happen if a terminal and a rave had a baby, and honestly? I'm here for it.
I used AI (thanks Claude) for the styling and front-end functionality, because life's too short to wrestle with CSS when you just want to build something fun.
Deploying to App Engine: A Journey
Step 1: Run gcloud app deploy
Step 2: Get a permissions error about storage buckets
Step 3: Google the error
Step 4: Run some IAM command
Step 5: Paste the command wrong because of line breaks
Step 6: Finally get it working
Step 7: Realize you could have just used the Cloud Console UI
The deployment actually works now though. Scales to zero when nobody's using it (which is always), so it costs approximately nothing to run my monument to unnecessary engineering.
The Quotes
80 hand-curated gems including:
- "This guy f***s!" - Russ Hanneman
- "Not hotdog." - Jian-Yang
- "I don't want to live in a world where someone else makes the world a better place better than we do." - Gavin Belson
- "The bear is sticky with honey." - Jared Dunn
I have no idea what that last one means but it felt important to include.
Full disclosure: I used AI to generate these quotes. Are they all 100% accurate to the show? Probably not. Did I fact-check any of them? Absolutely not. If Jared never actually said "The bear is sticky with honey," I don't want to know. It's canon now.
This is either a testament to how memorable the show's writing is, or a demonstration of AI confidently making things up. Either way, they feel right, and that's basically the same as being right.
What I Actually Learned
- Ktor is nice - Seriously, the HTML DSL is clean and embedding CSS/JS inline worked fine for this tiny project
- App Engine is still a thing - And it's actually pretty simple once you figure out the permissions dance
- Building useless things is fun - Sometimes you just want to see Gilfoyle quotes in neon green
Try It
Live at: https://bachmanity-bytes.uc.r.appspot.com
The code (here) is exactly as messy as you'd expect from a project built in one sitting. The CSS is inline. The JavaScript is inline. Everything is in a couple of Kotlin files. It compiles, which is basically the same as working, right?
Conclusion
Did I spend several hours building a quote website that nobody will use? Yes. Did I learn some Ktor and refresh my App Engine knowledge? Also yes. Would Erlich Bachman be proud?
He'd probably try to take 10% equity.
If you want to waste your time building something equally pointless, I highly recommend it. It's cheaper than therapy and slightly more productive than doomscrolling.
Top comments (0)