Bobby Ghalam

About

Hi, I'm Bobby G. Nearly a decade building SaaS products, mostly accounting and nonprofit software with genuinely unforgiving domain rules. TypeScript, React, Java, and Postgres at work; Elixir/Phoenix and Swift for everything I've shipped since, including this site. A life-long learner who enjoys problem solving, challenging domains, constraints, elegant solutions, collaboration, and cohesive teams that ship. Don't hesitate to reach out!

What is this?

A feed of links from newsletters and forums on my radar, aggregated and ranked by how often they show up across sources. Also a working portfolio: Elixir/Phoenix, Node.js scrapers, Cloudflare Email Workers, AI extraction, self-hosted via Dokploy on Hetzner.

Work

Things I've built and shipped. More imminently.

Abridgedly neighborhood book map

Snap a photo of a book you own and it lands on a neighborhood map. Free to list, borrow, and lend from the people down the street; rent or sell it instead and the money goes straight between the two of you.

  • Image recognition identifies the book from a photo, and on iPhone reads a whole shelf of spines in one pass; the same vision pipeline is built to generalize past books to a wider category of items.
  • The map ships seeded with a public dataset of 45,917 little free libraries, ingested into PostGIS, so there is something to find before anyone lists a book.
  • Phoenix LiveView on Postgres/PostGIS for geospatial search, Stripe for payments, QR codes for handoff, Oban for background jobs.
  • Native SwiftUI iOS app on the same API, shipped to the App Store, built from an iOS blueprint I reuse across products.
ElixirPhoenix LiveViewPostGISSwiftSwiftUIStripeOban
MindBlossom home page
MindBlossom: Second-brain OS private beta

One private brain that captures what you save, answers your email and texts, and remembers everything, so you can stop renting your memory from a dozen subscriptions.

  • First product shipped on the Whirlwind platform, live on self-hosted infrastructure.
  • Phoenix LiveView with Guardian JWT auth and Oban background job processing.
ElixirPhoenix LiveViewGuardianObanPostgres
Dejour feed
Dejour: Link aggregator and blog this site

A feed of links from the newsletters and forums on my radar, ranked by how often the same story shows up across independent sources.

  • Node scrapers and Cloudflare Email Workers ingest newsletters; AI extraction pulls out the actual links and dedupes them across sources.
  • Elixir/Phoenix LiveView on Postgres, Oban for the scheduled ingest pipeline.
  • Self-hosted on Hetzner via Dokploy, deployed from GitHub Actions.
ElixirPhoenix LiveViewNodeCloudflare WorkersOban
Tildes Bot profile on Bluesky
Tildes: Bluesky bot

Serves up the daily top ten from Tildes.net to Bluesky. Unattended since launch, 5,000+ posts in.

  • Node scraper on the AT Protocol, running on a scheduled pipeline with no manual intervention.
NodeAT ProtocolCheerio
Project Whirlwind: The platform underneath all of it private org

Everything above runs on infrastructure I stood up from nothing: GitHub org, CI/CD, service boundaries, and a local development environment that mirrors production.

  • Modular services on self-managed infrastructure (Hetzner via Dokploy), with GitHub Actions CI/CD, Docker multi-stage builds, and inter-service networking over Tailscale.
  • Shared gateway services: ai-gateway, a provider-agnostic completion layer wired to the Claude API and opencode, and comm-gateway, routing all SMS and email through Twilio, Mailgun, and Resend.
  • MindBlossom and Abridgedly both consume ai-gateway instead of integrating a model vendor directly, and book-data runs the vision pipeline behind Abridgedly's photo-to-book recognition. Swapping a provider is a change in one service, not four.
  • Architecture decision records, platform standards, and runbooks kept alongside the code.
DockerDokployHetznerGitHub ActionsTailscaleClaude APIResend
The Grazing Company home page
The Grazing Company: Catering site client

The new site for a Bay Area grazing table and charcuterie caterer, built with a small team to replace their Squarespace site without losing its search traffic.

  • Static pages served by a Cloudflare Worker that composes shared partials, redirects every old Squarespace URL, and sets security headers; Workers Builds deploys each push to main.
  • Every color is a token derived from six brand colors, and a lint fails the build on a raw hex value, so the palette and its AA contrast pairings hold as the site grows.
  • Local SEO built in: per-city location and service pages, linted LocalBusiness structured data, and share cards that unfurl correctly.
Cloudflare WorkersJavaScriptGSAPHTML/CSS

The name

A play on du jour, French for "of the day." The ∂ is a partial derivative. Yes, accent on the e is wrong, I know.