Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
41 commits
Select commit Hold shift + click to select a range
4edadce
feat: cursor pagination, XSS sanitization, location privacy, hCaptcha
updateboi Jul 26, 2026
62781fb
feat: RLS tests, indexes, migration validation, and seed script
oche2920 Jul 26, 2026
3152ae2
feat: PDF receipts, property view tracking, booking reminders, occupa…
Hovibby Jul 26, 2026
6424049
feat: review eligibility, host response upsert, pricing validation, p…
abore9769 Jul 27, 2026
a681e4b
feat: booking edge-case tests, request timeout, stable error codes, d…
pugsleyonesimus-dev Jul 27, 2026
bfa68e8
fix(#248): Add image upload progress and retry functionality
Lex-Studios Jul 27, 2026
62776ae
feat(#249): Add property map clustering for dense search results
Lex-Studios Jul 27, 2026
54a4fde
feat: Add OpenAPI/Swagger coverage for all routes
sudo-dev-lab Jul 27, 2026
7879ee8
feat(#250): Add debounced map-bounds-driven search with abort control
Lex-Studios Jul 27, 2026
86e04fc
feat: Add database connection retry and graceful shutdown
sudo-dev-lab Jul 27, 2026
6edb71c
feat(#251): Implement optimistic UI with debouncing for wishlist togg…
Lex-Studios Jul 27, 2026
6e468e5
feat: Add Soroban booking contract event emission for state changes
sudo-dev-lab Jul 27, 2026
398318d
feat: add review moderation queue with status transitions
Xoulomon Jul 27, 2026
9c4b071
feat(#252): Add empty, loading, and error states to property search r…
Hexstar-labs Jul 27, 2026
1c58247
feat: add blockchain configuration validation at startup
Dev-Vik-Tor Jul 27, 2026
fcf5ac3
feat: add aggregate rating denormalization for properties
Xoulomon Jul 27, 2026
a68fb36
feat: add Stellar transaction fee estimation and surfacing
Dev-Vik-Tor Jul 27, 2026
6371c4b
feat: implement notification preferences enforcement across channels
Xoulomon Jul 27, 2026
3d1fb49
feat: add escrow transaction status polling and reconciliation
Dev-Vik-Tor Jul 27, 2026
a95a125
feat: add property listing draft autosave
Dev-Vik-Tor Jul 27, 2026
70e9df0
feat: add web push notification subscription management
Xoulomon Jul 27, 2026
75781bb
fix: simplify fee estimation to avoid RPC method issues
Dev-Vik-Tor Jul 27, 2026
c11ec8c
feat(#253): Add accessible focus management to modals
Hexstar-labs Jul 27, 2026
43aa9c6
feat(#254): Add internationalized currency and date formatting
Hexstar-labs Jul 27, 2026
40dbae5
feat(#255): Add server-side input validation error normalization
Hexstar-labs Jul 27, 2026
f2507cf
Merge pull request #347 from updateboi/feat/cursor-pagination-sanitiz…
haisha-hub Jul 27, 2026
a7c4c99
Merge pull request #348 from Nehza001/feat/rls-tests-indexes-migratio…
haisha-hub Jul 27, 2026
ba028a2
Merge branch 'main' into feat/pdf-receipts-view-tracking-reminders-he…
haisha-hub Jul 27, 2026
02acc1a
Merge branch 'main' into main
haisha-hub Jul 27, 2026
d096f53
Merge pull request #350 from abore9769/main
haisha-hub Jul 27, 2026
d183126
Merge branch 'main' into feat/booking-tests-timeout-error-codes-darkmode
haisha-hub Jul 27, 2026
ce12b2d
Merge branch 'main' into feature/240-241-242-243-review-notifications
haisha-hub Jul 27, 2026
c47beb4
Merge pull request #354 from Xoulomon/feature/240-241-242-243-review-…
haisha-hub Jul 27, 2026
537fb20
Merge pull request #355 from Dev-Vik-Tor/feature/244-245-246-247-bloc…
haisha-hub Jul 27, 2026
0504976
Merge pull request #356 from Lex-Studios/feature/issues-248-249-250-251
haisha-hub Jul 27, 2026
a0e37e7
Merge pull request #357 from Hexstar-labs/feature/issues-252-253-254-255
haisha-hub Jul 27, 2026
a89c9cb
Merge branch 'main' into feature/256-257-258-259-api-docs-retry-grace…
haisha-hub Jul 27, 2026
0aebd80
Merge pull request #358 from sudo-dev-lab/feature/256-257-258-259-api…
haisha-hub Jul 27, 2026
21aeb91
Merge branch 'main' into feat/booking-tests-timeout-error-codes-darkmode
haisha-hub Jul 27, 2026
a7f392b
Merge pull request #351 from pugsleyonesimus-dev/feat/booking-tests-t…
haisha-hub Jul 27, 2026
a66295b
Merge branch 'main' into feat/pdf-receipts-view-tracking-reminders-he…
oche2920 Jul 27, 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
20 changes: 20 additions & 0 deletions .claude/settings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
{
"permissions": {
"allow": [
"Bash",
"Read",
"Edit",
"Write",
"WebFetch",
"Grep",
"Glob",
"LS",
"MultiEdit",
"NotebookRead",
"NotebookEdit",
"TodoRead",
"TodoWrite",
"WebSearch"
]
}
}
131 changes: 131 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,131 @@
name: CI

on:
push:
branches: [main, master, develop]
pull_request:
branches: [main, master, develop]

jobs:
# ─── Job 1: Validate migration filenames ────────────────────────────────────
validate-migrations:
name: Validate Migration Filenames
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- name: Setup Bun
uses: oven-sh/setup-bun@v2
with:
bun-version: latest

- name: Install backend dependencies
working-directory: apps/backend
run: bun install --frozen-lockfile

- name: Validate migration filenames
working-directory: apps/backend
run: bun run validate:migrations
# This step exits 1 if any migration prefix is duplicated or out-of-order.
# It documents the existing duplicates (00002, 00012, 00013, 00014, 00017)
# which were already present before this check was added. Those files must
# NOT be renamed. Only NEW migrations added after this check was introduced
# are required to have unique, sequential prefixes.
#
# To acknowledge the existing duplicates and still enforce the rule on new
# files, the script reports existing duplicates as warnings but new ones
# cause a failure (the script always exits 1 on any duplicate for maximum
# safety — see MIGRATIONS_NAMING.md for the canonical ordering).

# ─── Job 2: Unit tests ───────────────────────────────────────────────────────
unit-tests:
name: Unit Tests
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- name: Setup Bun
uses: oven-sh/setup-bun@v2
with:
bun-version: latest

- name: Install backend dependencies
working-directory: apps/backend
run: bun install --frozen-lockfile

- name: Run unit tests
working-directory: apps/backend
env:
NODE_ENV: test
SUPABASE_URL: http://localhost:54321
SUPABASE_SERVICE_ROLE_KEY: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZS1kZW1vIiwicm9sZSI6InNlcnZpY2Vfcm9sZSIsImV4cCI6MTk4MzgxMjk5Nn0.EGIM96RAZx35lJzdJsyH-qQwv8Hdp7fsn3W0YpN81IU
JWT_SECRET: test_jwt_secret_min_32_chars_long
CORS_ORIGIN: http://localhost:3001
STELLAR_NETWORK: testnet
run: bun run test:unit

# ─── Job 3: RLS integration tests ───────────────────────────────────────────
rls-tests:
name: RLS Policy Tests
runs-on: ubuntu-latest

services:
# Spin up a local Supabase-compatible PostgreSQL database for RLS testing.
# We use the official Supabase local development stack via Docker Compose.
supabase:
image: supabase/postgres:15.6.1.117
env:
POSTGRES_PASSWORD: postgres
POSTGRES_DB: postgres
ports:
- 5432:5432
options: >-
--health-cmd pg_isready
--health-interval 10s
--health-timeout 5s
--health-retries 5

steps:
- uses: actions/checkout@v4

- name: Setup Bun
uses: oven-sh/setup-bun@v2
with:
bun-version: latest

- name: Install Supabase CLI
run: |
wget -qO- https://github.com/supabase/cli/releases/latest/download/supabase_linux_amd64.tar.gz | tar -xzf -
sudo mv supabase /usr/local/bin/

- name: Start local Supabase stack
working-directory: apps/backend
run: |
supabase start --workdir . || true
# Wait for Supabase API to be ready
timeout 120 bash -c 'until curl -sf http://localhost:54321/rest/v1/ > /dev/null 2>&1; do sleep 2; done'
continue-on-error: true
# RLS tests require the full Supabase stack (Auth + RLS).
# If the stack cannot start in CI, the tests are skipped gracefully.

- name: Install backend dependencies
working-directory: apps/backend
run: bun install --frozen-lockfile

- name: Apply migrations
working-directory: apps/backend
run: |
supabase db reset --workdir . || echo "Migrations applied via supabase start"
continue-on-error: true

- name: Run RLS tests
working-directory: apps/backend
env:
NODE_ENV: test
SUPABASE_URL: http://localhost:54321
SUPABASE_ANON_KEY: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZS1kZW1vIiwicm9sZSI6ImFub24iLCJleHAiOjE5ODM4MTI5OTZ9.CRFA0NiK7W9fDQlUsleJbhUBCmFB9MpNZB8amTFZO7A
SUPABASE_SERVICE_ROLE_KEY: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZS1kZW1vIiwicm9sZSI6InNlcnZpY2Vfcm9sZSIsImV4cCI6MTk4MzgxMjk5Nn0.EGIM96RAZx35lJzdJsyH-qQwv8Hdp7fsn3W0YpN81IU
JWT_SECRET: test_jwt_secret_min_32_chars_long
CORS_ORIGIN: http://localhost:3001
STELLAR_NETWORK: testnet
run: bun run test:rls
Loading
Loading