2026-04-14 15:26:36 +02:00
2026-04-09 19:06:33 +02:00
2026-04-14 15:26:36 +02:00
2026-03-25 15:11:33 +01:00
2026-04-09 19:05:29 +02:00
2026-04-11 11:10:37 +02:00
2026-04-09 19:05:29 +02:00
2026-04-09 19:06:33 +02:00
2026-04-14 15:26:36 +02:00
2026-04-09 17:39:59 +02:00
2026-04-09 17:39:59 +02:00
2026-02-23 19:51:13 +01:00

Terminal Coffee Shop

A terminal-based coffee shop, accessible over SSH. Built with Go, Bubbletea, Wish, Chi, PostgreSQL, Stripe, and Shippo.

ssh localhost -p 23456

Running locally

# Copy and fill in env vars
cp .env.example .env

# Start the API server
go run api/main.go

# Start the SSH server
go run main.go

Stack

Layer Tech
TUI Bubbletea + Wish (SSH)
HTTP API Chi router
Database PostgreSQL + GORM
Auth SSH key fingerprint + JWT
Payments Stripe
Shipping Shippo

What's working

  • SSH server — key-based auth, auto user creation
  • Shop page — browse products with live detail panel
  • Cart — add/remove items, synced to API
  • Checkout flow — shipping address → payment → confirmation
  • Saved addresses and cards
  • Order history in account view
  • FAQ page
  • Responsive layout (small/medium/large terminal sizes)
  • Token refresh

TODO

Features missing vs reference (terminal.shop):

  • Splash/loading screen on connect
  • Animated logo with blinking cursor
  • API token management page
  • OAuth app management page
  • About page
  • Theme system — currently 40+ hardcoded hex colors scattered across files
  • Viewport-based scrolling — currently manual scroll math with hardcoded heights

Known bugs:

  • Address delete slice bug in shipping_form.go:386 — [m.AddressCursor+1:]... missing
  • Account page has a placeholder "something" menu item in models/coffee.go

Code quality:

  • Nested state structs (reference uses state.shop, state.cart, etc. vs flat Model)
  • Centralized styles file
Description
No description provided
Readme 45 MiB
Languages
Go 95.9%
Shell 3%
JavaScript 0.9%
Makefile 0.2%