Skip to content

first-fluke/juny

Repository files navigation

Fullstack Starter

GitHub Repo stars Last Commit Version Ask DeepWiki

English | 한국어

Template versioning via Release Please — see CHANGELOG.md for release history.

Production-ready fullstack monorepo template with FastAPI, Flutter, and GCP infrastructure.

3-Tier Architecture

graph TB
    subgraph Client
        Mobile[Flutter 3.38<br/>Riverpod]
    end

    subgraph GCP["GCP Cloud Run"]
        API[FastAPI<br/>Python 3.12]
        Worker[Worker<br/>CloudTasks]
    end

    subgraph Data
        DB[(PostgreSQL 16)]
        Cache[(Redis 7)]
        Storage[(Cloud Storage)]
    end

    Mobile --> API
    API --> DB
    API --> Cache
    API --> Worker
    Worker --> DB
    API --> Storage

    style Mobile fill:#02569B,color:#fff
    style API fill:#009688,color:#fff
    style Worker fill:#009688,color:#fff
    style DB fill:#336791,color:#fff
    style Cache fill:#DC382D,color:#fff
    style Storage fill:#4285F4,color:#fff
Loading

Key Features

  • Modern Stack: FastAPI, Flutter 3.38
  • Type Safety: Full type support with Pydantic and Dart
  • Authentication: OAuth (Google, GitHub, Facebook)
  • Internationalization: Flutter ARB (mobile), shared i18n package
  • Auto-generated API Client: swagger_parser (mobile)
  • Infrastructure as Code: Terraform + GCP (Cloud Run, Cloud SQL, Cloud Storage)
  • CI/CD: GitHub Actions + Workload Identity Federation (keyless deployment)
  • AI Agent Support: Guidelines for AI coding agents (Gemini, Claude, etc.)
  • mise Monorepo: mise-based task management and unified tool versions

Tech Stack

Layer Technology
Backend FastAPI, SQLAlchemy (async), PostgreSQL 16, Redis 7
Mobile Flutter 3.38, Riverpod 3, go_router 17, Firebase Crashlytics, Fastlane
Worker FastAPI + CloudTasks/PubSub
Infrastructure Terraform, GCP (Cloud Run, Cloud SQL, Cloud Storage, CDN)
CI/CD GitHub Actions, Workload Identity Federation
Tool Management mise (unified Node, Python, Flutter, Terraform versions)

Why this tech stack? — Detailed reasoning behind each technology choice.

Fullstack

AI Agent Orchestration

This template includes a multi-agent coordination workflow for complex cross-domain tasks.

graph TB
    subgraph Coordination["Coordination Layer"]
        User([User Request])
        PM[PM Agent<br/>Task Decomposition]
    end

    subgraph Execution["Parallel Execution"]
        FE[Frontend Agent<br/>Flutter]
        BE[Backend Agent<br/>FastAPI]
        Infra[Infra Agent<br/>Terraform]
    end

    subgraph Review["Quality Assurance"]
        QA[QA Agent<br/>Security/A11y/Perf]
    end

    User --> PM
    PM --> FE & BE & Infra
    FE & BE & Infra --> QA
    QA -->|Issues Found| FE & BE & Infra
    QA -->|Approved| Done([Complete])

    style PM fill:#8B5CF6,color:#fff
    style FE fill:#0070f3,color:#fff
    style BE fill:#009688,color:#fff
    style Infra fill:#F59E0B,color:#fff
    style QA fill:#EF4444,color:#fff
Loading
Agent Role
PM Agent Analyzes requirements, defines API contracts, creates prioritized task breakdown
Domain Agents Frontend, Backend, Mobile, Infra agents execute tasks in parallel by priority
QA Agent Reviews security (OWASP), performance, accessibility (WCAG 2.1 AA)

See .agent/workflows/coordinate.md for the full orchestration workflow.

Quick Start

Choose one of the following methods to start with this template:

# Create from CLI
bun create juny my-app
# or
npm create juny my-app

Or use GitHub:

  1. Click Use this template to create a new repository
  2. Or Fork this repository

Prerequisites

Required for all platforms:

For mobile development (iOS/Android):

  • Xcode - Includes iOS Simulator (macOS only)
  • Android Studio - Includes Android SDK and emulator

Optional:

1. Install Runtimes

# Install mise (if not installed)
curl https://mise.run | sh

# Install all runtimes (Node 24, Python 3.12, Flutter 3, bun, uv, Terraform)
mise install

2. Install Dependencies

# Install all dependencies at once
mise run install

3. Start Local Infrastructure

mise infra:up

This starts:

  • PostgreSQL (5433)
  • Redis (6380)
  • MinIO (9010, 9011)

4. Run Database Migrations

mise db:migrate

5. Start Development Servers

# Start API and Mobile services
mise dev:mobile

# Or start all services
mise dev

Project Structure

juny/
├── apps/
│   ├── api/           # FastAPI backend
│   ├── worker/        # Background worker
│   ├── mobile/        # Flutter mobile app
│   └── infra/         # Terraform infrastructure
├── packages/
│   ├── design-tokens/ # Shared design tokens (Source of Truth)
│   └── i18n/          # Shared i18n package (Source of Truth)
├── .agent/rules/      # AI agent guidelines
├── .serena/           # Serena MCP config
└── .github/workflows/ # CI/CD

Commands

mise Monorepo Tasks

This project uses mise monorepo mode with //path:task syntax.

# List all available tasks
mise tasks --all
Command Description
mise db:migrate Run database migrations
mise dev Start all services
mise dev:mobile Start API and Mobile services
mise format Format all apps
mise gen:api Generate OpenAPI schema and API clients
mise i18n:build Build i18n files
mise infra:down Stop local infrastructure
mise infra:up Start local infrastructure
mise lint Lint all apps
mise run install Install all dependencies
mise test Test all apps
mise tokens:build Build design tokens
mise typecheck Type check

App-specific Tasks

API (apps/api)
Command Description
mise //apps/api:install Install dependencies
mise //apps/api:dev Start development server
mise //apps/api:test Run tests
mise //apps/api:lint Run linter
mise //apps/api:format Format code
mise //apps/api:typecheck Type check
mise //apps/api:migrate Run migrations
mise //apps/api:migrate:create Create new migration
mise //apps/api:gen:openapi Generate OpenAPI schema
mise //apps/api:infra:up Start local infrastructure
mise //apps/api:infra:down Stop local infrastructure
Mobile (apps/mobile)
Command Description
mise //apps/mobile:install Install dependencies
mise //apps/mobile:dev Run on device/simulator
mise //apps/mobile:build Build
mise //apps/mobile:test Run tests
mise //apps/mobile:lint Run analyzer
mise //apps/mobile:format Format code
mise //apps/mobile:gen:l10n Generate localizations
mise //apps/mobile:gen:api Generate API client
Worker (apps/worker)
Command Description
mise //apps/worker:install Install dependencies
mise //apps/worker:dev Start worker
mise //apps/worker:test Run tests
mise //apps/worker:lint Run linter
mise //apps/worker:format Format code
Infrastructure (apps/infra)
Command Description
mise //apps/infra:init Initialize Terraform
mise //apps/infra:plan Preview changes
mise //apps/infra:apply Apply changes
mise //apps/infra:plan:prod Preview production
mise //apps/infra:apply:prod Apply production
i18n (packages/i18n)
Command Description
mise //packages/i18n:install Install dependencies
mise //packages/i18n:build Build i18n files for mobile
mise //packages/i18n:build:mobile Build for mobile
Design Tokens (packages/design-tokens)
Command Description
mise //packages/design-tokens:install Install dependencies
mise //packages/design-tokens:build Build tokens for mobile
mise //packages/design-tokens:dev Watch mode for development
mise //packages/design-tokens:test Run tests

Internationalization (i18n)

packages/i18n is the Single Source of Truth for i18n resources.

# Edit i18n files
packages/i18n/src/en.arb  # English (default)
packages/i18n/src/ko.arb  # Korean
packages/i18n/src/ja.arb  # Japanese

# Build and deploy to each app
mise i18n:build
# Generated files:
# - apps/mobile/lib/i18n/messages/app_*.arb (Flutter ARB)

Design Tokens

packages/design-tokens is the Single Source of Truth for design tokens (colors, spacing, etc.).

# Edit tokens
packages/design-tokens/src/tokens.ts

# Build and distribute
mise tokens:build
# Generated files:
# - apps/mobile/lib/core/theme/generated_theme.dart (Flutter Theme)

Configuration

Environment Variables

Copy example files and configure:

# API
cp apps/api/.env.example apps/api/.env

# Infra
cp apps/infra/terraform.tfvars.example apps/infra/terraform.tfvars

GitHub Actions Secrets

Set these secrets in your repository:

Secret Description
GCP_PROJECT_ID GCP project ID
GCP_REGION GCP region (e.g., asia-northeast3)
WORKLOAD_IDENTITY_PROVIDER From Terraform output
GCP_SERVICE_ACCOUNT From Terraform output
FIREBASE_SERVICE_ACCOUNT_JSON Firebase service account JSON (for mobile deployment)
FIREBASE_ANDROID_APP_ID Firebase Android app ID

Firebase (Mobile)

  1. Install FlutterFire CLI:
dart pub global activate flutterfire_cli
  1. Configure Firebase for your project:
cd apps/mobile
flutterfire configure

This generates lib/firebase_options.dart with your Firebase configuration.

Deployment

GitHub Actions (Recommended)

Push to main branch triggers automatic deployment:

  • apps/api/ changes → Deploy API
  • apps/worker/ changes → Deploy Worker
  • apps/mobile/ changes → Build & Deploy to Firebase App Distribution

Manual Deployment

# Build and push Docker images
cd apps/api
docker build -t gcr.io/PROJECT_ID/api .
docker push gcr.io/PROJECT_ID/api

# Deploy to Cloud Run
gcloud run deploy api --image gcr.io/PROJECT_ID/api --region REGION

Mobile (Fastlane)

The mobile app uses Fastlane for build automation and deployment.

cd apps/mobile

# Install Ruby dependencies
bundle install

# Available lanes
bundle exec fastlane android build       # Build APK
bundle exec fastlane android firebase    # Deploy to Firebase App Distribution
bundle exec fastlane android internal    # Deploy to Play Store (internal)
bundle exec fastlane ios build           # Build iOS (no codesign)
bundle exec fastlane ios testflight_deploy  # Deploy to TestFlight

AI Agent Support

This template is designed to work with AI coding agents (Gemini, Claude, etc.).

  • .agent/rules/ - Guidelines for AI agents
  • .serena/ - Serena MCP configuration

Documentation

License

MIT

Sponsors

If this project helped you, please consider buying me a coffee!

Buy Me A Coffee

Or leave a star:

gh api --method PUT /user/starred/first-fluke/juny

Star History

Star History Chart

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Sponsor this project

  •  

Packages

No packages published

Contributors 2

  •  
  •