Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Decision Log

A web application for recording decisions - the context, the options considered, the reasoning, and eventually the outcome.

(Not yet) Live at decisionlog.app

What this project demonstrates

This isn't a novel product idea. It's a deliberate showcase of the full development and deployment pipeline:

  • FastAPI Python web application with Jinja2 server-side rendering
  • Google OAuth authentication (no password storage)
  • PostgreSQL via SQLAlchemy ORM
  • Docker containerisation with multi-service local dev via Compose
  • GitHub Actions CI/CD pipeline
  • Google Cloud Run for serverless container deployment
  • Google Artifact Registry for container image storage
  • Google Cloud SQL for managed Postgres in production
  • Google Secret Manager for secrets (no env vars in deployment config)
  • Workload Identity Federation - no long-lived service account keys
  • Custom domain with automatic HTTPS via Cloud Run domain mapping

The v2 branch will add "The Argument Clinic" - a feature for steelmanning both sides of a decision before making it - demonstrating a full feature deployment through the same pipeline.

Local development

Prerequisites

  • Docker and Docker Compose
  • A Google OAuth app (see below)

Setup

git clone https://github.com/stetho/decision-log.git
cd decision-log
cp .env.example .env
# Fill in GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET, and SECRET_KEY
docker compose up

App runs at http://localhost:8000

Google OAuth setup

  1. Go to Google Cloud Console → APIs & Services → Credentials
  2. Create an OAuth 2.0 Client ID (Web application)
  3. Add http://localhost:8000/auth/callback to Authorised redirect URIs
  4. Copy client ID and secret into your .env

Architecture

GitHub push to main
  → GitHub Actions: test → build Docker image → push to Artifact Registry
  → Cloud Run: pull image, deploy
  → Cloud SQL: managed Postgres (europe-west2)
  → Secret Manager: DATABASE_URL, GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET, SECRET_KEY
  → Custom domain: decisionlog.app → Cloud Run service

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages