Skip to content

Latest commit

 

History

159 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

DevFlare

A Cloudflare-focused personal developer platform. One monorepo, four products: a project hub, browser utilities, an identity provider, and a future Cloudflare authorization service.

CI Deploy License: MIT Angular AnalogJS Cloudflare Workers

DevFlare · Volt UI · Agent docs · Deployment

DevFlare's Projects page: one card per application with its live URL, Pages and Worker counts, and latest deployment status

What is in this repository

"DevFlare repo" is this monorepo. "DevFlare" on its own means the project-hub app. They are not the same thing.

Product Path Purpose Status
DevFlare apps/devflare Personal project hub — projects, where they run, deploys Live at devflare.andersseen.dev
DevTools apps/devtools Curated developer tools: local (in-browser) + connected Builds and runs locally; not deployed yet
DevAuth apps/dev-auth + SDK OAuth 2.1 / OIDC identity provider + @dev-auth/* SDK Live at auth-devflare.andersseen.dev
Cloudflare Connect apps/cloudflare-connect Future delegated Cloudflare authorization broker Placeholder only — health endpoint, no OAuth

Each app has its own README defining what it is and is not.

DevFlare — personal project hub

Every project at a glance: its live URL, its repository, the Cloudflare Pages projects and Workers behind it, and what deployed last. Open a project for its resources, deployment history, redeploy, and links to roll back. A Cloud section keeps the raw, account-wide view of Workers, Pages, D1, KV and R2. Signs in through DevAuth. → apps/devflare/README.md

Not yet: analytics, logs, health checks or alerts.

DevTools — curated developer tools

Few tools, high quality, ones we actually use. Local tools run entirely in the tab — no uploads, no account, not even a request to DevTools' server. Connected tools need a server (storage, or fetching a domain without CORS) and sign in through DevAuth; DevTools then decides who may use them. Every page is prerendered and served as a static asset. → apps/devtools/README.md

Category Local tools Connected tools
Web SEO Simulator · QR Code Studio · cURL ↔ Fetch Short Links · Domain Inspector
Security OAuth / OIDC Inspector · Security Headers
Cloud Wrangler Config Doctor
Data Data Converter (JSON ⇄ CSV)
Media Screen Recorder · Social Card Designer · Cinematic Palette · Background Remover

DevAuth authenticates, DevTools authorizes: a DevAuth account alone does not unlock connected tools — DEVTOOLS_ALLOWED_USERS does.

Image compression and SVG optimisation live in Imageryx, a separate project.

DevTools home: tools grouped into Web, Data and Media, with a 'Runs in your browser · no account' badge

DevAuth — identity provider

A standalone OAuth 2.1 / OIDC provider (Hono + better-auth + D1) that DevFlare and applications in other repositories sign in against, plus the published @dev-auth/core, @dev-auth/client, @dev-auth/angular and @dev-auth/elements SDK packages. → apps/dev-auth/README.md

Cloudflare Connect — not built yet

The boundary for a future service that answers "which Cloudflare resources may this app touch?". Today DevFlare holds its own single-tenant Cloudflare connection. → apps/cloudflare-connect/README.md

Architecture

Browser ──► DevFlare (Analog/Nitro Worker)        devflare.andersseen.dev
              │  /api/auth/*   ── OIDC ─────────► DevAuth (Hono Worker)
              │  /api/v1/*     ── h3 handlers ──► D1  devflare-db
              │  /api/v1/cloud ── Cloudflare API (owner's account)
              │  /tools/*      ── 302 ──────────► DevTools (when DEVTOOLS_URL is set)

Browser ──► DevTools (Worker + Static Assets; every page prerendered)
              │  /api/auth/*   ── OIDC (own client) ► DevAuth
              │  /api/v1/*     ── connected tools ─► D1  devtools-db
              │  short links   ── 302 ─────────────► destination

Databases: DevAuth → identity · DevFlare → projects/infra · DevTools → its
session + short links. No app reads another's database.

DevAuth ──► D1 dev-auth-db-prod (users, sessions, OAuth) · KV (rate limits)

DevFlare and DevTools never import each other; shared code goes through libs/shared/*. Full map and dependency rules: docs/ai/ARCHITECTURE.md.

Environment DevFlare DevTools DevAuth
Production devflare.andersseen.dev — (not deployed) auth-devflare.andersseen.dev
Local localhost:4200 localhost:4300 localhost:8787

Tech stack

Layer Technology
Meta-framework AnalogJS 2.4 (Vite + Nitro; SSR for DevFlare, prerender for DevTools)
UI Angular 21 — standalone, zoneless, signals
Components Volt UI (@voltui/components)
Styling Tailwind CSS 4, shared tokens in libs/shared/ui
Monorepo Nx 22 + pnpm
Auth better-auth on Hono
Data Cloudflare D1 via db0
Hosting Cloudflare Workers + Static Assets
Testing Vitest + Playwright

Quick start

Requirements: Node.js 22+, pnpm 9+.

pnpm install
cp .env.sample .env       # fill in your values
pnpm db:migrate:local     # set up the local D1 databases
pnpm dev:all              # DevAuth :8787 · DevFlare :4200 · DevTools :4300
pnpm seed:user            # in another terminal

Open http://localhost:4200 and sign in with test@devflare.com / TestPass123. DevTools at http://localhost:4300 needs no account and no other service.

Script Starts
pnpm dev:all All three
pnpm dev:auth DevAuth only → :8787
pnpm dev:app DevFlare only → :4200
pnpm dev:tools DevTools only → :4300

Scripts

Everything runs from the repo root — the Cloudflare scripts wrap wrangler --cwd, so there is never a cd.

Script Description
pnpm check format → lint → typecheck → test → build
pnpm build Build DevFlare and DevTools (build:app/build:tools)
pnpm db:migrate:local Apply D1 migrations locally
pnpm db:migrate Apply D1 migrations to production
pnpm deploy:dry Build and validate DevAuth + DevFlare, ship nothing
pnpm deploy:all Deploy DevAuth, then DevFlare
pnpm cf:tail:app Live DevFlare production logs
pnpm cf:app <args> Escape hatch → wrangler --cwd apps/devflare
pnpm cf:tools <args> Escape hatch → wrangler --cwd apps/devtools

Run pnpm check before opening a PR — CI runs the same gates plus E2E.

Repository layout

devflare/
├── apps/
│   ├── devflare/            # Project hub: Analog app + Nitro server → Worker
│   ├── devflare-e2e/        # Playwright E2E for DevFlare
│   ├── devtools/            # Browser utilities: Analog, prerendered → static assets
│   ├── devtools-e2e/        # Playwright E2E for DevTools
│   ├── dev-auth/            # Identity provider: Hono + better-auth + D1
│   └── cloudflare-connect/  # Placeholder for the Cloudflare authorization broker
├── libs/
│   ├── shared/core/         # @org/core — DevFlare platform services
│   ├── shared/ui/           # @org/ui — shared primitives + design tokens (theme.css)
│   ├── shared/dev-auth-*/   # @dev-auth/* — DevAuth consumer SDK (published to npm)
│   └── deploy/              # @org/deploy — DevFlare's Pages direct-upload helpers
└── docs/
    ├── ai/                  # Architecture, conventions, workflows, state
    └── specs/               # Spec-driven development records

Conventions

  • Standalone Angular only — no NgModules. Pages use export default class.
  • Signals over RxJS for component state; inject() over constructor injection.
  • Business logic out of pages — DevFlare's in @org/core, DevTools' in colocated services under apps/devtools/src/app/tools.
  • Tools run in the browser. A DevTools utility never gets a server route.
  • Apps never import apps. Enforced by Nx domain:* tags.
  • Server routes use h3 defineEventHandler, with db.sql tagged templates — never string-concatenated SQL.

Full detail in AGENTS.md and docs/ai/CONVENTIONS.md.

Deployment

Push to main deploys DevAuth and DevFlare via GitHub Actions. DevTools has build and preview configuration but no domain or deploy job yet. Manual:

pnpm deploy:dry     # validate first
pnpm deploy:all

Full setup — resources, secrets, domains, verification — in DEPLOY.md.

Contributing

Issues and PRs welcome. Branch from main as feature/*, use feat: / fix: commit prefixes, and make sure pnpm check passes.

License

MIT © andersseen

About

Browser-first developer tools — image compression, QR codes, background removal, palettes and more, all running client-side. Angular 21 + AnalogJS on Cloudflare Workers.

Topics

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Contributors

Languages