Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
152 changes: 76 additions & 76 deletions .github/copilot-instructions.md
Original file line number Diff line number Diff line change
@@ -1,76 +1,76 @@
# Copilot Coding Agent Instructions

This project uses the **Spec-Kit** agentic development process. Every change
MUST follow these rules. Violations will be caught by CI and rejected.

## Before Writing Any Code

1. **Find the relevant spec** — Check `specs/` for the feature spec matching
your issue. Read spec.md, plan.md, tasks.md, and data-model.md before coding.
2. **Read the constitution** — `specs/constitution.md` (v1.4.0) defines 13
mandatory architectural principles. Key constraints:
- **I. API-First**: All mutations go through API routes, never direct DB from components.
Response shapes live in `packages/shared/src/types/`. Error responses use `@/lib/errors`.
- **II. Test-First**: Every service function needs an integration test. Use `createTestDb()` for PGlite isolation.
- **III. Privacy**: PII encrypted at rest, EXIF stripped from uploads, GDPR deletion covers all tables.
- **IV. Server-Side Authority**: Zod schemas validate all request bodies. No trusting client input.
- **IX. Scoped Permissions**: Use `withPermission()` middleware on all admin/mutation endpoints.
- **XI. Resource Ownership**: Every mutation verifies caller owns the resource or holds scoped admin.
- **XII. Financial Integrity**: Server-side pricing only. Stripe Connect with signed OAuth state.
3. **Check tasks.md** — If your issue maps to a task, mark it `[X]` when done.

## Monorepo Structure

npm workspaces monorepo — always run commands from the repo root:

| Workspace | Package | Purpose |
|-----------|---------|---------|
| `apps/web/` | `@acroyoga/web` | Next.js 16 web app (App Router, React 19) |
| `packages/shared/` | `@acroyoga/shared` | Shared TypeScript types and contracts |
| `packages/shared-ui/` | `@acroyoga/shared-ui` | 15 cross-platform UI components (design tokens) |
| `packages/tokens/` | `@acroyoga/tokens` | Design token pipeline — **must build before other packages** |

## Validation Checklist — REQUIRED Before Completing Any Task

Run these in order. All must pass:

npm run tokens:build -w @acroyoga/tokens # 1. Build tokens (prerequisite)
npm run typecheck # 2. Zero type errors
npm run lint -w @acroyoga/web # 3. Zero lint warnings
npm run test # 4. All tests pass (tokens > shared-ui > web)
npm run build -w @acroyoga/web # 5. Production build succeeds

If you add a new API route, you MUST also:
- Add integration tests in `apps/web/tests/integration/`
- Test 403 for unauthorized callers (Constitution QG-10)
- Use `createTestDb()` for PGlite test isolation

## Auth Pattern

- Web: `getServerSession()` / `requireAuth()` — session-based only
- Never trust client-injectable headers (`x-user-id`, `x-api-key` etc.)
- Admin routes: `withPermission()` middleware, not bare `requireAuth()`

## Code Conventions

- TypeScript strict mode — no `any`, no `@ts-ignore`
- Zod schemas at all API boundaries (no manual `typeof` checks)
- SQL migrations: `apps/web/src/db/migrations/` (raw SQL, no ORM)
- Response types: `packages/shared/src/types/`
- Error responses: `{ error: string, code: string, details?: unknown }` via `@/lib/errors`
- No hardcoded user-facing strings (i18n extractable, Constitution VIII)
- No N+1 queries — use JOINs or `WHERE IN` for lists (Constitution VI)

## Quality Gates (enforced by CI)

The CI pipeline (`.github/workflows/ci.yml`) runs on every PR:

1. Typecheck (`tsc -b`)
2. Lint (ESLint + jsx-a11y)
3. Build (Next.js production)
4. Bundle size <=200KB compressed
5. All tests: tokens (20), shared-ui (85), web (339+)
6. i18n string lint
7. Storybook build + a11y audit (axe-core)

Your PR will be blocked if any gate fails. Fix before requesting review.
# Copilot Coding Agent Instructions
This project uses the **Spec-Kit** agentic development process. Every change
MUST follow these rules. Violations will be caught by CI and rejected.
## Before Writing Any Code
1. **Find the relevant spec** — Check `specs/` for the feature spec matching
your issue. Read spec.md, plan.md, tasks.md, and data-model.md before coding.
2. **Read the constitution** — `specs/constitution.md` (v1.4.0) defines 13
mandatory architectural principles. Key constraints:
- **I. API-First**: All mutations go through API routes, never direct DB from components.
Response shapes live in `packages/shared/src/types/`. Error responses use `@/lib/errors`.
- **II. Test-First**: Every service function needs an integration test. Use `createTestDb()` for PGlite isolation.
- **III. Privacy**: PII encrypted at rest, EXIF stripped from uploads, GDPR deletion covers all tables.
- **IV. Server-Side Authority**: Zod schemas validate all request bodies. No trusting client input.
- **IX. Scoped Permissions**: Use `withPermission()` middleware on all admin/mutation endpoints.
- **XI. Resource Ownership**: Every mutation verifies caller owns the resource or holds scoped admin.
- **XII. Financial Integrity**: Server-side pricing only. Stripe Connect with signed OAuth state.
3. **Check tasks.md** — If your issue maps to a task, mark it `[X]` when done.
## Monorepo Structure
npm workspaces monorepo — always run commands from the repo root:
| Workspace | Package | Purpose |
|-----------|---------|---------|
| `apps/web/` | `@acroyoga/web` | Next.js 16 web app (App Router, React 19) |
| `packages/shared/` | `@acroyoga/shared` | Shared TypeScript types and contracts |
| `packages/shared-ui/` | `@acroyoga/shared-ui` | 15 cross-platform UI components (design tokens) |
| `packages/tokens/` | `@acroyoga/tokens` | Design token pipeline — **must build before other packages** |
## Validation Checklist — REQUIRED Before Completing Any Task
Run these in order. All must pass:
npm run tokens:build -w @acroyoga/tokens # 1. Build tokens (prerequisite)
npm run typecheck # 2. Zero type errors
npm run lint -w @acroyoga/web # 3. Zero lint warnings
npm run test # 4. All tests pass (tokens > shared-ui > web)
npm run build -w @acroyoga/web # 5. Production build succeeds
If you add a new API route, you MUST also:
- Add integration tests in `apps/web/tests/integration/`
- Test 403 for unauthorized callers (Constitution QG-10)
- Use `createTestDb()` for PGlite test isolation
## Auth Pattern
- Web: `getServerSession()` / `requireAuth()` — session-based only
- Never trust client-injectable headers (`x-user-id`, `x-api-key` etc.)
- Admin routes: `withPermission()` middleware, not bare `requireAuth()`
## Code Conventions
- TypeScript strict mode — no `any`, no `@ts-ignore`
- Zod schemas at all API boundaries (no manual `typeof` checks)
- SQL migrations: `apps/web/src/db/migrations/` (raw SQL, no ORM)
- Response types: `packages/shared/src/types/`
- Error responses: `{ error: string, code: string, details?: unknown }` via `@/lib/errors`
- No hardcoded user-facing strings (i18n extractable, Constitution VIII)
- No N+1 queries — use JOINs or `WHERE IN` for lists (Constitution VI)
## Quality Gates (enforced by CI)
The CI pipeline (`.github/workflows/ci.yml`) runs on every PR:
1. Typecheck (`tsc -b`)
2. Lint (ESLint + jsx-a11y)
3. Build (Next.js production)
4. Bundle size <=200KB compressed
5. All tests: tokens (20), shared-ui (85), web (339+)
6. i18n string lint
7. Storybook build + a11y audit (axe-core)
Your PR will be blocked if any gate fails. Fix before requesting review.
24 changes: 24 additions & 0 deletions .github/workflows/copilot-setup-steps.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
name: "Copilot Setup Steps"

on: workflow_dispatch

jobs:
setup:
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v4

- uses: actions/setup-node@v4
with:
node-version: "24"
cache: "npm"

- name: Install dependencies
run: npm ci

- name: Build design tokens
run: npm run tokens:build -w @acroyoga/tokens

- name: Typecheck
run: npm run typecheck
Comment on lines +7 to +24

Check warning

Code scanning / CodeQL

Workflow does not contain permissions Medium

Actions job or workflow does not limit the permissions of the GITHUB_TOKEN. Consider setting an explicit permissions block, using the following as a minimal starting point: {contents: read}

Copilot Autofix

AI 17 days ago

In general, the fix is to define an explicit permissions: block in the workflow, granting only the minimal rights needed. For a build/test workflow like this that only checks out code and runs local Node commands, contents: read is typically sufficient, and optionally packages: read if private packages are involved.

For this specific file, the safest and simplest change is to add a top-level permissions: block (applies to all jobs) right after the on: section, setting contents: read. This documents the intended least privilege and ensures that even if repository defaults are broad or change later, the setup job will only have read access to repository contents. No existing functionality needs write access, so this change will not affect behavior. No additional imports or methods are required; this is purely a YAML workflow configuration change within .github/workflows/copilot-setup-steps.yml.

Suggested changeset 1
.github/workflows/copilot-setup-steps.yml

Autofix patch

Autofix patch
Run the following command in your local git repository to apply this patch
cat << 'EOF' | git apply
diff --git a/.github/workflows/copilot-setup-steps.yml b/.github/workflows/copilot-setup-steps.yml
--- a/.github/workflows/copilot-setup-steps.yml
+++ b/.github/workflows/copilot-setup-steps.yml
@@ -2,6 +2,9 @@
 
 on: workflow_dispatch
 
+permissions:
+  contents: read
+
 jobs:
   setup:
     runs-on: ubuntu-latest
EOF
@@ -2,6 +2,9 @@

on: workflow_dispatch

permissions:
contents: read

jobs:
setup:
runs-on: ubuntu-latest
Copilot is powered by AI and may make mistakes. Always verify output.
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,9 @@ node_modules/
*.tsbuildinfo
next-env.d.ts
.pglite/
.pglite.bak/
test-output.txt
_test-*.mjs

# Package build outputs
packages/*/dist/
Expand Down
18 changes: 18 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,24 @@ This is an **npm workspaces monorepo** with shared packages:
| `packages/shared-ui` | `@acroyoga/shared-ui` | 15 cross-platform UI components with design tokens |
| `packages/tokens` | `@acroyoga/tokens` | Design token pipeline (CSS, TS, Swift, Kotlin output) |

### Specifications

Each feature is developed from a full spec (user scenarios, data model, API contracts, implementation plan, and tasks). All specs live in `specs/`:

| Spec | Name | Priority | Status |
|------|------|----------|--------|
| 001 | [Event Discovery & RSVP](specs/001-event-discovery-rsvp/) | P0 | Implemented |
| 002 | [Community & Social](specs/002-community-social/) | P1 | Implemented |
| 003 | [Recurring & Multi-Day Events](specs/003-recurring-multiday/) | P1 | Implemented |
| 004 | [Permissions & Creator Accounts](specs/004-permissions-creator-accounts/) | P0 | Implemented |
| 005 | [Teacher Profiles & Reviews](specs/005-teacher-profiles-reviews/) | P1 | Implemented |
| 006 | [Code Review Fixes](specs/006-code-review-fixes/) | P0 | Implemented |
| 007 | [Mock Authentication](specs/007-mock-auth/) | P1 | Implemented |
| 007 | [Simple UI Pages](specs/007-simple-ui-pages/) | P0 | Implemented |
| 008 | [Cross-Platform UI](specs/008-cross-platform-ui/) | P0 | Implemented (web) |

> Specs 006 and 007 are internal infrastructure (security hardening, dev tooling, UI pages). Spec 008 mobile phases are deferred.

## Architectural Principles

The project is governed by a [constitution](specs/constitution.md) (v1.4.0) defining 13 core principles:
Expand Down
7 changes: 7 additions & 0 deletions _test-api.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
const endpoints = ["/api/events", "/api/teachers", "/api/venues", "/", "/events", "/teachers", "/profile"];
for (const ep of endpoints) {
const r = await fetch("http://localhost:3000" + ep);
const t = await r.text();
const preview = ep.startsWith("/api") ? t.substring(0, 200) : t.length + " bytes";
console.log(ep, "STATUS:", r.status, preview);
}
13 changes: 13 additions & 0 deletions _test-seed.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
const endpoints = ["/api/events", "/api/teachers", "/api/dev/mock-user"];
for (const ep of endpoints) {
const r = await fetch("http://localhost:3000" + ep);
const data = await r.json();
if (ep === "/api/events") {
console.log("EVENTS:", data.total, "items. Titles:", data.events.map(function(e){ return e.title }).join(", "));
} else if (ep === "/api/teachers") {
console.log("TEACHERS:", data.total, "items. IDs:", data.teachers.map(function(t){ return t.user_id.slice(-2) }).join(", "));
} else {
console.log("MOCK USERS:", data.availableUsers ? data.availableUsers.length : "N/A", "available");
if (data.availableUsers) data.availableUsers.forEach(function(u){ console.log(" -", u.name, "(" + u.displayRole + ")") });
}
}
1 change: 1 addition & 0 deletions apps/web/.pglite.bak/PG_VERSION
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
17
Binary file added apps/web/.pglite.bak/base/1/112
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/113
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/1247
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/1247_fsm
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/1247_vm
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/1249
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/1249_fsm
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/1249_vm
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/1255
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/1255_fsm
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/1255_vm
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/1259
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/12596
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/12596_fsm
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/12596_vm
Binary file not shown.
Empty file.
Binary file added apps/web/.pglite.bak/base/1/1259_fsm
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/1259_vm
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/12600
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/12601
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/12601_fsm
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/12601_vm
Binary file not shown.
Empty file.
Binary file added apps/web/.pglite.bak/base/1/12605
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/12606
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/12606_fsm
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/12606_vm
Binary file not shown.
Empty file.
Binary file added apps/web/.pglite.bak/base/1/12610
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/12611
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/12611_fsm
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/12611_vm
Binary file not shown.
Empty file.
Binary file added apps/web/.pglite.bak/base/1/12615
Binary file not shown.
Empty file.
Empty file.
Binary file added apps/web/.pglite.bak/base/1/16384
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/16385
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/16390
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/16392
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/16394
Binary file not shown.
Empty file.
Binary file added apps/web/.pglite.bak/base/1/16400
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/16401
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/16403
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/16405
Binary file not shown.
Empty file.
Binary file added apps/web/.pglite.bak/base/1/16411
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/16413
Binary file not shown.
Empty file.
Empty file.
Binary file added apps/web/.pglite.bak/base/1/16421
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/16422
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/16424
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/16431
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/16432
Binary file not shown.
Empty file.
Empty file.
Binary file added apps/web/.pglite.bak/base/1/16440
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/16441
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/16453
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/16454
Binary file not shown.
Empty file.
Empty file.
Binary file added apps/web/.pglite.bak/base/1/16477
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/16478
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/16490
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/16491
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/16492
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/16493
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/16494
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/16495
Binary file not shown.
Empty file.
Binary file added apps/web/.pglite.bak/base/1/16506
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/16518
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/16519
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/16520
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/16521
Binary file not shown.
Empty file.
Binary file added apps/web/.pglite.bak/base/1/16528
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/16540
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/16541
Binary file not shown.
Empty file.
Binary file added apps/web/.pglite.bak/base/1/16547
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/16549
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/16561
Binary file not shown.
Empty file.
Binary file added apps/web/.pglite.bak/base/1/16569
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/16591
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/16592
Binary file not shown.
Empty file.
Empty file.
Binary file added apps/web/.pglite.bak/base/1/16601
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/16602
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/16604
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/16616
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/16617
Binary file not shown.
Empty file.
Empty file.
Binary file added apps/web/.pglite.bak/base/1/16628
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/16629
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/16631
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/16638
Binary file not shown.
Empty file.
Binary file added apps/web/.pglite.bak/base/1/16645
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/16647
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/16659
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/16660
Binary file not shown.
Empty file.
Binary file added apps/web/.pglite.bak/base/1/16668
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/16670
Binary file not shown.
Empty file.
Empty file.
Binary file added apps/web/.pglite.bak/base/1/16687
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/16688
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/16710
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/16711
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/16712
Binary file not shown.
Empty file.
Binary file added apps/web/.pglite.bak/base/1/16719
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/16721
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/16733
Binary file not shown.
Empty file.
Binary file added apps/web/.pglite.bak/base/1/16740
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/16742
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/16754
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/16755
Binary file not shown.
Empty file.
Binary file added apps/web/.pglite.bak/base/1/16762
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/16764
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/16776
Binary file not shown.
Empty file.
Empty file.
Binary file added apps/web/.pglite.bak/base/1/16787
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/16788
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/16805
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/16806
Binary file not shown.
Empty file.
Empty file.
Binary file added apps/web/.pglite.bak/base/1/16815
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/16816
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/16823
Binary file not shown.
Empty file.
Empty file.
Binary file added apps/web/.pglite.bak/base/1/16830
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/16831
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/16833
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/16835
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/16836
Binary file not shown.
Empty file.
Binary file added apps/web/.pglite.bak/base/1/16845
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/16862
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/16863
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/16864
Binary file not shown.
Empty file.
Empty file.
Binary file added apps/web/.pglite.bak/base/1/16875
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/16876
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/16888
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/16889
Binary file not shown.
Empty file.
Binary file added apps/web/.pglite.bak/base/1/16896
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/16898
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/16900
Binary file not shown.
Empty file.
Empty file.
Binary file added apps/web/.pglite.bak/base/1/16914
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/16915
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/16917
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/16918
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/16919
Binary file not shown.
Empty file.
Empty file.
Binary file added apps/web/.pglite.bak/base/1/16929
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/16930
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/16932
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/16944
Binary file not shown.
Empty file.
Empty file.
Binary file added apps/web/.pglite.bak/base/1/16955
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/16956
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/16963
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/16964
Binary file not shown.
Empty file.
Binary file added apps/web/.pglite.bak/base/1/16971
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/16973
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/16985
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/16986
Binary file not shown.
Empty file.
Empty file.
Binary file added apps/web/.pglite.bak/base/1/16999
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/17000
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/17007
Binary file not shown.
Empty file.
Binary file added apps/web/.pglite.bak/base/1/17012
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/17014
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/17026
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/17027
Binary file not shown.
Empty file.
Binary file added apps/web/.pglite.bak/base/1/17041
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/17053
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/17054
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/17055
Binary file not shown.
Empty file.
Empty file.
Binary file added apps/web/.pglite.bak/base/1/17064
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/17065
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/17087
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/17088
Binary file not shown.
Empty file.
Empty file.
Binary file added apps/web/.pglite.bak/base/1/17101
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/17102
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/17104
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/17111
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/17112
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/17113
Binary file not shown.
Empty file.
Empty file.
Binary file added apps/web/.pglite.bak/base/1/17123
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/17124
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/17136
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/17137
Binary file not shown.
Empty file.
Empty file.
Binary file added apps/web/.pglite.bak/base/1/17145
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/17146
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/17153
Binary file not shown.
Empty file.
Binary file added apps/web/.pglite.bak/base/1/17161
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/17163
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/17175
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/17176
Binary file not shown.
Empty file.
Empty file.
Binary file added apps/web/.pglite.bak/base/1/17185
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/17186
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/17188
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/17210
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/17211
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/17212
Binary file not shown.
Empty file.
Empty file.
Binary file added apps/web/.pglite.bak/base/1/17223
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/17224
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/17236
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/17237
Binary file not shown.
Empty file.
Binary file added apps/web/.pglite.bak/base/1/17244
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/17246
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/17258
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/174
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/175
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/2187
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/2224
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/2228
Binary file not shown.
Empty file.
Empty file.
Binary file added apps/web/.pglite.bak/base/1/2337
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/2579
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/2600
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/2600_fsm
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/2600_vm
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/2601
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/2601_fsm
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/2601_vm
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/2602
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/2602_fsm
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/2602_vm
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/2603
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/2603_fsm
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/2603_vm
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/2604
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/2604_fsm
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/2605
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/2605_fsm
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/2605_vm
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/2606
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/2606_fsm
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/2606_vm
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/2607
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/2607_fsm
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/2607_vm
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/2608
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/2608_fsm
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/2608_vm
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/2609
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/2609_fsm
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/2609_vm
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/2610
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/2610_fsm
Binary file not shown.
Binary file added apps/web/.pglite.bak/base/1/2610_vm
Binary file not shown.
Empty file.
Loading
Loading