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
Abridgedly — Neighborhood book marketplace live

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; 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 Swift iOS client on a shared API, in TestFlight beta, built from a reusable project blueprint.
ElixirPhoenix LiveViewPostGISSwiftStripeOban
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 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.