Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
36 commits
Select commit Hold shift + click to select a range
73251d7
Add PixelAI v2 core redesign design spec
Pycomet Jul 12, 2026
dfef5f3
Update spec: rebuild happens in-repo on v2-rebuild branch
Pycomet Jul 12, 2026
5840c62
docs: add v2 rebuild implementation plan
Pycomet Jul 12, 2026
d6632f9
chore!: remove v1 app source for v2 rebuild (recoverable on main)
Pycomet Jul 12, 2026
4769f06
feat: scaffold v2 app (Next latest, Tailwind v4, shadcn, AI SDK, Vitest)
Pycomet Jul 12, 2026
9aba425
fix: vitest projects config discovers node-env tests
Pycomet Jul 12, 2026
275a529
feat(engine): provider registry with five providers
Pycomet Jul 12, 2026
f4c9c34
feat(engine): neutral prompt builder with thumbnail presets
Pycomet Jul 12, 2026
5b16ce9
feat(engine): Stability custom image-model adapter
Pycomet Jul 12, 2026
37c2b4e
fix(test): satisfy ImageModelV4CallOptions in stability adapter test
Pycomet Jul 12, 2026
89bee1d
feat(engine): HuggingFace custom image-model adapter
Pycomet Jul 12, 2026
b552fdd
feat(auth): firebase client/admin setup, user doc on every sign-in path
Pycomet Jul 12, 2026
ec5ae80
fix(firebase): server-side access to client auth/db throws clear error
Pycomet Jul 12, 2026
cc42dcc
feat(quota): transactional daily quota with lazy UTC reset
Pycomet Jul 12, 2026
d1e97fd
feat(storage): blob upload/delete for generated images
Pycomet Jul 12, 2026
820858f
test(storage): cover extension mapping and exact upload pathname
Pycomet Jul 12, 2026
bf94c0a
feat(api): authenticated, quota-gated generate endpoint with persistence
Pycomet Jul 12, 2026
2c5115f
fix(api): test auth bypass matrix; keep error contract when quota che…
Pycomet Jul 12, 2026
5aa3e67
feat(client): parallel fan-out generation hook with per-provider retry
Pycomet Jul 12, 2026
0154945
fix(client): guard fan-out hook against stale settles from superseded…
Pycomet Jul 12, 2026
6993b6b
feat(auth): auth context, gate, login/register with password reset
Pycomet Jul 12, 2026
5854c62
fix(auth): validate next redirect param; shared schemas; social pendi…
Pycomet Jul 12, 2026
4dc95ab
fix(auth): harden next-param guard against control-char origin bypass
Pycomet Jul 12, 2026
39c0818
feat(ui): dashboard generator with parallel provider result cards
Pycomet Jul 12, 2026
f502d39
fix(ui): client-safe provider metadata module; single providers fetch
Pycomet Jul 12, 2026
9907476
feat(history): gallery, owner-scoped delete, firestore rules
Pycomet Jul 12, 2026
c336a04
fix(history): delete-route error contract, anti-leak test, ordered ro…
Pycomet Jul 12, 2026
acd143f
feat(ui): landing page, navbar, mounted error boundary
Pycomet Jul 12, 2026
1fc4fd4
fix(ui): toast on sign-out failure
Pycomet Jul 12, 2026
c1e42e2
chore: README, CI workflow, deploy notes
Pycomet Jul 12, 2026
05dfa87
test(e2e): dashboard generate-flow smoke
Pycomet Jul 12, 2026
75ba65d
fix(auth): production-guard client dev bypasses; static env access fo…
Pycomet Jul 12, 2026
1e214b6
feat(import): flagged YouTube import + title inference
Pycomet Jul 12, 2026
53c8949
fix(import): hostname-anchored YT validation, oEmbed error contract, …
Pycomet Jul 12, 2026
57bddc5
fix: history field mapping + shared GenerationDoc type, blob remotePa…
Pycomet Jul 12, 2026
7021d75
fix(security): constrain users create rule to bootstrap shape; clamp …
Pycomet Jul 12, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 26 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
# --- Firebase (client — safe to expose, but keep consistent) ---
NEXT_PUBLIC_FIREBASE_API_KEY=
NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN=
NEXT_PUBLIC_FIREBASE_PROJECT_ID=
NEXT_PUBLIC_FIREBASE_APP_ID=
# --- Firebase admin (server only) ---
FIREBASE_PROJECT_ID=
FIREBASE_CLIENT_EMAIL=
FIREBASE_PRIVATE_KEY=
# --- Image providers (server only; leave blank to disable a provider) ---
OPENAI_API_KEY=
REPLICATE_API_TOKEN=
FAL_API_KEY=
STABILITY_API_KEY=
HUGGINGFACE_API_KEY=
# --- Storage ---
BLOB_READ_WRITE_TOKEN=
# --- Dev only: skip auth verification outside production ---
AUTH_DEV_BYPASS=
# --- Dev/e2e only: client-side mirror of AUTH_DEV_BYPASS so AuthGate skips
# the sign-in redirect (e.g. Playwright smoke tests). Inlined at build time —
# never set in production. ---
NEXT_PUBLIC_AUTH_DEV_BYPASS=
# --- Feature flags ---
# Enable YouTube video import and title-based form inference (set to "1" to enable)
FEATURE_YT_IMPORT=
33 changes: 0 additions & 33 deletions .eslintrc.json

This file was deleted.

5 changes: 0 additions & 5 deletions .firebaserc

This file was deleted.

37 changes: 37 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
name: CI

on:
push:
branches: [main, v2-rebuild]
pull_request:

jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- uses: pnpm/action-setup@v4
with:
version: 10

- uses: actions/setup-node@v4
with:
node-version: 22
cache: pnpm

- run: pnpm install --frozen-lockfile

- run: pnpm lint

- run: pnpm test

- run: pnpm build
env:
NEXT_PUBLIC_FIREBASE_API_KEY: ci-placeholder
NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN: ci.firebaseapp.com
NEXT_PUBLIC_FIREBASE_PROJECT_ID: ci-placeholder
NEXT_PUBLIC_FIREBASE_APP_ID: ci-placeholder

# TODO: Add quota tests job when Java setup is available
# (Firebase emulator requires Java on PATH; out of scope for current CI)
36 changes: 0 additions & 36 deletions .github/workflows/firebase-hosting-merge.yml

This file was deleted.

31 changes: 0 additions & 31 deletions .github/workflows/firebase-hosting-pull-request.yml

This file was deleted.

168 changes: 44 additions & 124 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,134 +1,54 @@
# Logs
logs
*.log
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.

# dependencies
/node_modules
/.pnp
.pnp.*
.yarn/*
!.yarn/patches
!.yarn/plugins
!.yarn/releases
!.yarn/versions

# testing
/coverage
/test-results/
/playwright-report/
/blob-report/
/playwright/.cache/

# next.js
/.next/
/out/

# production
/build

# misc
.DS_Store
*.pem

# debug
npm-debug.log*
yarn-debug.log*
yarn-error.log*
lerna-debug.log*
.pnpm-debug.log*

# Diagnostic reports (https://nodejs.org/api/report.html)
report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json

# Runtime data
pids
*.pid
*.seed
*.pid.lock

# Directory for instrumented libs generated by jscoverage/JSCover
lib-cov

# Coverage directory used by tools like istanbul
coverage
*.lcov

# nyc test coverage
.nyc_output

# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
.grunt

# Bower dependency directory (https://bower.io/)
bower_components
# firebase emulator logs
firebase-debug.log*
firestore-debug.log*
ui-debug.log*

# node-waf configuration
.lock-wscript
# env files (can opt-in for committing if needed)
.env*
!.env.example

# Compiled binary addons (https://nodejs.org/api/addons.html)
build/Release
# vercel
.vercel

# Dependency directories
node_modules/
jspm_packages/
.firebase/

# Snowpack dependency directory (https://snowpack.dev/)
web_modules/

# TypeScript cache
# typescript
*.tsbuildinfo
next-env.d.ts

# Optional npm cache directory
.npm

# Optional eslint cache
.eslintcache

# Optional stylelint cache
.stylelintcache

# Microbundle cache
.rpt2_cache/
.rts2_cache_cjs/
.rts2_cache_es/
.rts2_cache_umd/

# Optional REPL history
.node_repl_history

# Output of 'npm pack'
*.tgz

# Yarn Integrity file
.yarn-integrity

# dotenv environment variable files
.env
.env.development.local
.env.test.local
.env.production.local
.env.local

# parcel-bundler cache (https://parceljs.org/)
.cache
.parcel-cache

# Next.js build output
.next
out

# Nuxt.js build / generate output
.nuxt
dist

# Gatsby files
.cache/
# Comment in the public line in if your project uses Gatsby and not Next.js
# https://nextjs.org/blog/next-9-1#public-directory-support
# public

# vuepress build output
.vuepress/dist

# vuepress v2.x temp and cache directory
.temp
.cache

# Docusaurus cache and generated files
.docusaurus

.firebase
./.firebase

# Serverless directories
.serverless/

# FuseBox cache
.fusebox/

# DynamoDB Local files
.dynamodb/

# TernJS port file
.tern-port

# Stores VSCode versions used for testing VSCode extensions
.vscode-test

# yarn v2
.yarn/cache
.yarn/unplugged
.yarn/build-state.yml
.yarn/install-state.gz
.pnp.*
# superpowers (internal task-planning artifacts, not part of the app)
.superpowers/
7 changes: 0 additions & 7 deletions .prettierrc

This file was deleted.

5 changes: 5 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
<!-- BEGIN:nextjs-agent-rules -->
# This is NOT the Next.js you know

This version has breaking changes — APIs, conventions, and file structure may all differ from your training data. Read the relevant guide in `node_modules/next/dist/docs/` before writing any code. Heed deprecation notices.
<!-- END:nextjs-agent-rules -->
1 change: 1 addition & 0 deletions CLAUDE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
@AGENTS.md
Loading
Loading