Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
66 commits
Select commit Hold shift + click to select a range
2abbcf5
Feature: Add recurring event support
daveearley Apr 4, 2026
456c07c
Add railway
daveearley Apr 4, 2026
e4055cc
Update deploy scripts
daveearley Apr 5, 2026
707d2e9
Update list and calendar view logic
daveearley Apr 5, 2026
68a0990
Feature: Update auth page design (#1145)
daveearley Apr 6, 2026
30fc084
Merge origin/develop into v2.0.0-alpha.1
daveearley Apr 7, 2026
458a27c
test: BaseRepository coverage + hermetic test DB infrastructure (#1153)
daveearley Apr 9, 2026
830de58
Merge remote-tracking branch 'origin/v2.0.0-alpha.1' into feat/recurr…
daveearley Apr 9, 2026
4108349
test(infra): migrate test database once per phpunit process
daveearley Apr 9, 2026
4198258
fix(recurring-events): close IDOR, race, and visibility gaps
daveearley Apr 10, 2026
c35e597
test(infra): split unit/feature suites and run feature in CI
daveearley Apr 10, 2026
112778a
Check-in UX improvements (#1175)
daveearley Apr 21, 2026
9b593f3
Merge origin/develop into v2.0.0-alpha.1
daveearley Apr 21, 2026
e0b34a9
Merge remote-tracking branch 'origin/v2.0.0-alpha.1' into v2.0.0-alpha.1
daveearley Apr 21, 2026
d4a8250
Merge origin/v2.0.0-alpha.1 into feat/recurring-events
daveearley Apr 21, 2026
aadb542
fix: pass useGetEventStats options as object instead of positional
daveearley Apr 21, 2026
b563038
Check in list fixes
daveearley Apr 23, 2026
80fc20f
fix: recurring event UI snags
daveearley May 10, 2026
8fb1413
recurring events cleanup
daveearley May 10, 2026
624d4c9
Merge pull request #1143 from HiEventsDev/feat/recurring-events
daveearley May 10, 2026
08a5e87
feat: move Stripe Connect, VAT, and platform fees to the organizer le…
daveearley May 13, 2026
a743e3f
refactor: merge VAT into the Payouts settings section
daveearley May 15, 2026
af25c1c
Feature: support occurrence locations (#1204)
daveearley May 25, 2026
c674541
Feature/dashboard redesign (#1205)
daveearley May 27, 2026
eba14d8
Feature: Migrate alerts to callouts (#1206)
daveearley May 28, 2026
fd91f90
Feature: Laravel 13 upgrade (#1207)
daveearley May 28, 2026
0df3e80
Feature: PHP 8.5 upgrade (#1208)
daveearley May 28, 2026
4475d0d
Feature: Update React + Mantine UI (#1209)
daveearley May 29, 2026
c383205
Feature: Embedded Widget Rewrite (#1211)
daveearley Jun 1, 2026
2f12e59
Feature: Occurrence improvements (#1212)
daveearley Jun 2, 2026
c648c39
Feature: Occurrence fixes (#1213)
daveearley Jun 4, 2026
ad6195b
Remove email from AttendeeWithCheckInPublicResource
daveearley Jul 2, 2026
89cc8b5
Merge origin/develop (v1.10.0-beta) into v2.0.0-alpha.1
daveearley Jul 2, 2026
b145fed
style: apply Pint formatting across backend
daveearley Jul 2, 2026
67b0158
chore: ignore the backend Pint reformat in git blame
daveearley Jul 2, 2026
1b5af51
test: fix time-bomb dates in OrderCreateRequestValidationServiceTest
daveearley Jul 2, 2026
18aed99
Fix v2.0.0 release issues (#1243)
daveearley Jul 3, 2026
a2cf7a4
Improve UI
daveearley Jul 7, 2026
0740df0
Merge branch 'develop' into v2.0.0-alpha.1
daveearley Jul 9, 2026
4069786
Fix occurrence loading
daveearley Jul 10, 2026
786802e
Occurrence bug fixes + add testing bootstrap command
daveearley Jul 12, 2026
02392b5
Remove sold out status on occurences
daveearley Jul 13, 2026
d988ff5
Waitlist UX/UI imporvements
daveearley Jul 13, 2026
a80db45
Location management improvements
daveearley Jul 16, 2026
aaeb436
Multiday occurrence improvements
daveearley Jul 19, 2026
1002f21
Occurrence fixes
daveearley Jul 20, 2026
ec00fb0
Occurrence fixes
daveearley Jul 20, 2026
0d403b4
Fix CI/CD bugs
daveearley Jul 21, 2026
9bcef34
Remove duplicate methods
daveearley Jul 21, 2026
d6e804a
Feature: Add e2e tests + Occurence fixes (#1276)
daveearley Jul 21, 2026
a446256
Merge branch 'v2.0.0-alpha.1' of github.com:HiEventsDev/hi.events int…
daveearley Jul 21, 2026
9e76ed2
Race condition fix
daveearley Jul 21, 2026
dfe548a
Feature: Add automation test suite (#1278)
daveearley Jul 25, 2026
026a668
Merge branch 'develop' into v2.0.0-alpha.1
daveearley Jul 25, 2026
824907b
Update broken e2e test
daveearley Jul 25, 2026
bd6be1e
UI fixes
daveearley Jul 26, 2026
51b7742
Feature: Add order level promo codes (#1281)
daveearley Jul 26, 2026
15d4610
remove vendor
daveearley Jul 26, 2026
2ba8886
Merge branch 'v2.0.0-alpha.1' of github.com:HiEventsDev/hi.events int…
daveearley Jul 26, 2026
b56eae7
Fix e2e test
daveearley Jul 26, 2026
d68d373
Fix ticket bg colour
daveearley Jul 26, 2026
c8569fe
Improve event go live modal
daveearley Jul 26, 2026
11501d5
chore: remove accidentally committed dev certs and logo archive
daveearley Jul 27, 2026
00ba8bb
style: remove explanatory comments across backend and frontend
daveearley Jul 27, 2026
fb08ec6
chore: ignore comment-removal revision in git blame
daveearley Jul 27, 2026
63f5573
Don't run on version brances on push
daveearley Jul 27, 2026
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
  •  
  •  
  •  
64 changes: 64 additions & 0 deletions .agents/skills/translations/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
---
name: translations
description: Frontend translation workflow using Lingui - extracting, adding, and compiling translations for all supported languages
---

# Frontend Translation Workflow (Lingui)

IMPORTANT: Always update translations as you develop features. When adding new translatable strings, immediately add translations for all supported languages.

## Core Commands

```bash
cd frontend

# Extract translatable strings (use --clean for accurate counts)
yarn messages:extract --clean

# Compile translations for production
yarn messages:compile

# Check for untranslated strings
cd scripts && ./list_untranslated_strings.sh
```

## Process

1. **Extract**: `yarn messages:extract --clean`
2. **Check**: Look at the output table for missing translation counts
3. **Add translations**: Update the `.po` files for each language
4. **Verify**: Run extract again to confirm 0 missing
5. **Compile**: `yarn messages:compile`

## Adding Translations

Add entries to each locale's `.po` file in `frontend/src/locales/`:

```po
#: src/path/to/component.tsx:123
msgid "Your English String"
msgstr "Translated String"
```

## Supported Languages

| Code | Language |
|------|----------|
| en | English (source - no translation needed) |
| de | Deutsch |
| es | Espanol |
| fr | Francais |
| pt | Portugues |
| pt-br | Portugues do Brasil |
| it | Italiano |
| nl | Nederlands |
| zh-cn | Simplified Chinese |
| zh-hk | Traditional Chinese (HK) |
| vi | Tieng Viet |
| ru | Russian (currently untranslated) |

## Troubleshooting

- **Counts seem wrong**: Use `--clean` flag to remove obsolete entries
- **Translation not appearing**: Run `yarn messages:compile` after adding
- **Syntax errors**: Check for proper escaping of quotes in `.po` files
65 changes: 1 addition & 64 deletions .claude/skills/translations/SKILL.md
Original file line number Diff line number Diff line change
@@ -1,64 +1 @@
---
name: translations
description: Frontend translation workflow using Lingui - extracting, adding, and compiling translations for all supported languages
---

# Frontend Translation Workflow (Lingui)

IMPORTANT: Always update translations as you develop features. When adding new translatable strings, immediately add translations for all supported languages.

## Core Commands

```bash
cd frontend

# Extract translatable strings (use --clean for accurate counts)
yarn messages:extract --clean

# Compile translations for production
yarn messages:compile

# Check for untranslated strings
cd scripts && ./list_untranslated_strings.sh
```

## Process

1. **Extract**: `yarn messages:extract --clean`
2. **Check**: Look at the output table for missing translation counts
3. **Add translations**: Update the `.po` files for each language
4. **Verify**: Run extract again to confirm 0 missing
5. **Compile**: `yarn messages:compile`

## Adding Translations

Add entries to each locale's `.po` file in `frontend/src/locales/`:

```po
#: src/path/to/component.tsx:123
msgid "Your English String"
msgstr "Translated String"
```

## Supported Languages

| Code | Language |
|------|----------|
| en | English (source - no translation needed) |
| de | Deutsch |
| es | Espanol |
| fr | Francais |
| pt | Portugues |
| pt-br | Portugues do Brasil |
| it | Italiano |
| nl | Nederlands |
| zh-cn | Simplified Chinese |
| zh-hk | Traditional Chinese (HK) |
| vi | Tieng Viet |
| ru | Russian (currently untranslated) |

## Troubleshooting

- **Counts seem wrong**: Use `--clean` flag to remove obsolete entries
- **Translation not appearing**: Run `yarn messages:compile` after adding
- **Syntax errors**: Check for proper escaping of quotes in `.po` files
see @../../../.agents/skills/translations/SKILL.md
12 changes: 12 additions & 0 deletions .git-blame-ignore-revs
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
# Revisions listed here are ignored by `git blame` (bulk reformatting, etc.).
#
# Enable locally with:
# git config blame.ignoreRevsFile .git-blame-ignore-revs
#
# GitHub applies this file automatically.

# style: apply Pint formatting across backend
b145fed4d0b0f82bf29f48145672f04bca6b5170

# style: remove explanatory comments across backend and frontend
00ba8bbb388d05e7d6498a25b049a47661d84861
2 changes: 1 addition & 1 deletion .github/workflows/deploy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ jobs:
- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: 8.3
php-version: 8.5
tools: composer:v2
coverage: none

Expand Down
118 changes: 118 additions & 0 deletions .github/workflows/e2e.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,118 @@
name: E2E Tests

on:
push:
branches: [main, develop]
paths:
- 'backend/**'
- 'frontend/**'
- 'e2e/**'
- 'docker/e2e/**'
- '.github/workflows/e2e.yml'
pull_request:
types: [opened, synchronize, reopened, labeled]
paths:
- 'backend/**'
- 'frontend/**'
- 'e2e/**'
- 'docker/e2e/**'
- '.github/workflows/e2e.yml'
schedule:
- cron: '0 3 * * *'

concurrency:
group: e2e-${{ github.ref }}
cancel-in-progress: true

jobs:
plan:
runs-on: ubuntu-latest
outputs:
matrix: ${{ steps.set.outputs.matrix }}
steps:
- id: set
env:
FULL: ${{ github.event_name != 'pull_request' || contains(github.event.pull_request.labels.*.name, 'full-e2e') }}
run: |
if [ "$FULL" = "true" ]; then
echo 'matrix={"include":[{"name":"full-1","pw_args":"--shard=1/2"},{"name":"full-2","pw_args":"--shard=2/2"}]}' >> "$GITHUB_OUTPUT"
else
echo 'matrix={"include":[{"name":"smoke","pw_args":"--grep @smoke"}]}' >> "$GITHUB_OUTPUT"
fi

e2e:
needs: plan
runs-on: ubuntu-latest
timeout-minutes: 30

strategy:
fail-fast: false
matrix: ${{ fromJSON(needs.plan.outputs.matrix) }}

env:
COMPOSE_FILE: docker/e2e/docker-compose.e2e.yml
E2E_IMAGE_TAG: ci
STRIPE_PUBLIC_KEY: ${{ secrets.STRIPE_TEST_PUBLIC_KEY }}
STRIPE_SECRET_KEY: ${{ secrets.STRIPE_TEST_SECRET_KEY }}

steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3

- name: Build backend image
uses: docker/build-push-action@v6
with:
context: ./backend
file: ./backend/Dockerfile
load: true
tags: hievents-e2e-backend:ci
cache-from: type=gha,scope=e2e-backend
cache-to: type=gha,scope=e2e-backend,mode=max

- name: Build frontend image
uses: docker/build-push-action@v6
with:
context: ./frontend
file: ./frontend/Dockerfile.ssr
load: true
tags: hievents-e2e-frontend:ci
cache-from: type=gha,scope=e2e-frontend
cache-to: type=gha,scope=e2e-frontend,mode=max

- name: Set up Node
uses: actions/setup-node@v4
with:
node-version: 22
cache: npm
cache-dependency-path: e2e/package-lock.json

- name: Cache Playwright browsers
uses: actions/cache@v4
with:
path: ~/.cache/ms-playwright
key: ${{ runner.os }}-playwright-${{ hashFiles('e2e/package-lock.json') }}

- name: Run E2E suite
run: ./e2e/run-e2e.sh -- ${{ matrix.pw_args }}

- name: Collect stack logs on failure
if: failure()
run: docker compose -f "$COMPOSE_FILE" logs --no-color > e2e/compose-logs.txt

- name: Upload report and artifacts
if: ${{ !cancelled() }}
uses: actions/upload-artifact@v4
with:
name: playwright-report-${{ matrix.name }}
path: |
e2e/playwright-report/
e2e/test-results/
e2e/compose-logs.txt
retention-days: 14

- name: Tear down the stack
if: always()
run: docker compose -f "$COMPOSE_FILE" down -v
108 changes: 108 additions & 0 deletions .github/workflows/tests.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
name: Backend Tests

on:
push:
branches: [main, develop, 'v[0-9]+.[0-9]+.[0-9]+-*']
paths:
- 'backend/**'
- '.github/workflows/tests.yml'
pull_request:
paths:
- 'backend/**'
- '.github/workflows/tests.yml'

jobs:
tests:
runs-on: ubuntu-latest

strategy:
matrix:
php-versions: ['8.3', '8.4', '8.5']

services:
# Postgres is started for the Feature suite. The Unit suite does not need
# a live connection — it only reads DB_DATABASE for the _test guard check
# in CreatesApplication — so it runs in parallel with Postgres warming up.
postgres:
image: postgres:15
env:
POSTGRES_DB: hievents_test
POSTGRES_USER: hievents
POSTGRES_PASSWORD: hievents
ports:
- 5432:5432
options: >-
--health-cmd "pg_isready -U hievents -d hievents_test"
--health-interval 10s
--health-timeout 5s
--health-retries 5

# Job-level env. .env.testing supplies the rest, but the DB host on a CI
# runner is 127.0.0.1 (service container exposes its port on the runner),
# not the docker network alias used locally — override here.
env:
DB_HOST: 127.0.0.1
DB_PORT: 5432
DB_DATABASE: hievents_test
DB_USERNAME: hievents
DB_PASSWORD: hievents

steps:
- name: Checkout code
uses: actions/checkout@v3

- name: Set up PHP
uses: shivammathur/setup-php@v2
with:
php-version: ${{ matrix.php-versions }}
extensions: mbstring, xml, ctype, iconv, intl, pdo, pdo_mysql, pdo_pgsql, pgsql, tokenizer, gd
ini-values: post_max_size=256M, upload_max_filesize=256M
coverage: none

- name: Get Composer Cache Directory
id: composer-cache
run: echo "::set-output name=dir::$(composer config cache-files-dir)"

- name: Cache dependencies
uses: actions/cache@v3
with:
path: ${{ steps.composer-cache.outputs.dir }}
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
restore-keys: |
${{ runner.os }}-composer-

- name: Create Laravel bootstrap cache directory
run: mkdir -p ./backend/bootstrap/cache && chmod -R 777 ./backend/bootstrap/cache

- name: Install dependencies
run: cd backend && composer install --prefer-dist --no-progress --no-interaction

- name: Stage .env for testing
# Laravel auto-loads .env.testing when APP_ENV=testing, but artisan
# commands run outside that flow read .env directly. Copy .env.testing
# to .env so both paths see the same config.
run: cp backend/.env.testing backend/.env

- name: Run Unit test suite
# Pure unit tests — no DB connection, no migrations. The CreatesApplication
# bootstrap detects the absence of DatabaseTransactions / RefreshDatabase
# traits and skips migrate:fresh entirely. Runs in parallel with the
# Postgres service container coming up.
run: cd backend && ./vendor/bin/phpunit --testsuite=Unit --no-coverage

- name: Wait for Postgres
run: |
for i in {1..30}; do
if pg_isready -h 127.0.0.1 -p 5432 -U hievents -d hievents_test; then
exit 0
fi
sleep 1
done
echo "Postgres did not become ready in time" >&2
exit 1

- name: Run Feature test suite
# Integration tests against the real PostgreSQL test database. The first
# test that boots Laravel triggers migrate:fresh once per process via
# CreatesApplication::ensureTestDatabaseIsMigrated.
run: cd backend && ./vendor/bin/phpunit --testsuite=Feature --no-coverage
Loading
Loading