Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
67 commits
Select commit Hold shift + click to select a range
c7c6079
Warm UX translations before asset resolution
dominikletica Jun 13, 2026
0bdc888
Add Symfony UX alert center foundation
dominikletica Jun 13, 2026
c9e516e
Polish notification center presentation
dominikletica Jun 13, 2026
0532bae
Refine notification center interactions
dominikletica Jun 13, 2026
c418365
Fix demo package CSS validation
dominikletica Jun 13, 2026
1c55638
Clarify dev asset compile rules
dominikletica Jun 13, 2026
fd3b5a8
Add Mercure-backed UI alert infrastructure
dominikletica Jun 13, 2026
c50a4f0
Migrate request alerts to dispatcher
dominikletica Jun 13, 2026
3d2ddeb
Update alert and Mercure project notes
dominikletica Jun 13, 2026
1c88526
Harden UI alert Mercure delivery
dominikletica Jun 13, 2026
aaabbb1
Add live endpoint and cookie consent foundations
dominikletica Jun 14, 2026
2609168
Add consent and notification UI hooks
dominikletica Jun 14, 2026
7ad53e3
Stabilize backend checks and update project notes
dominikletica Jun 14, 2026
6bb863c
Refine consent preview and operation alerts
dominikletica Jun 14, 2026
8a132ae
Tail large log files efficiently
dominikletica Jun 14, 2026
931d36c
Add reusable admin filter foundations
dominikletica Jun 14, 2026
059ae11
Add autocomplete select hooks
dominikletica Jun 14, 2026
142ca31
Add reusable dialog and clipboard controllers
dominikletica Jun 14, 2026
ff0fbf9
Document UX foundation helpers
dominikletica Jun 14, 2026
041d73d
Finalize UX helper foundations
dominikletica Jun 14, 2026
6545235
Map operation triggers to completion actions
dominikletica Jun 14, 2026
729c8be
Smooth notification center interactions
dominikletica Jun 14, 2026
152f545
Remove preview analytics consent stub
dominikletica Jun 14, 2026
e5c568f
Record final UX branch verification
dominikletica Jun 14, 2026
c9cd006
Relax Mercure reachability probes
dominikletica Jun 14, 2026
1457401
Probe Mercure publish endpoint reachability
dominikletica Jun 14, 2026
a17b4a7
Address live endpoint and consent review findings
dominikletica Jun 14, 2026
4d907f1
Address second review hardening findings
dominikletica Jun 14, 2026
31035a1
Fix Caddy-based Mercure startup
dominikletica Jun 14, 2026
0c838fa
Fix Mercure runtime test paths on Windows
dominikletica Jun 14, 2026
0f76fda
Address live alert review hardening
dominikletica Jun 14, 2026
975ac35
Reject unsupported app secrets
dominikletica Jun 14, 2026
81209c2
Change default placeholder APP_SECRET
dominikletica Jun 14, 2026
9668fee
Derive Mercure JWT from app secret
dominikletica Jun 14, 2026
f113961
Harden alert and endpoint edge cases
dominikletica Jun 14, 2026
d80d448
Version bump -> 0.2.4
dominikletica Jun 14, 2026
2de5a15
Harden consent and package endpoint scopes
dominikletica Jun 14, 2026
85cbd7d
Harden alert review edge cases
dominikletica Jun 14, 2026
4d0859d
Add native JavaScript test runner
dominikletica Jun 14, 2026
9cc3843
Add JavaScript controller behavior tests
dominikletica Jun 14, 2026
0226e73
Add bin/jstest as PR-verify requirement
dominikletica Jun 14, 2026
ab5bab0
Improve skip notice when Node.js is not available
dominikletica Jun 14, 2026
3b7a785
Harden Mercure setup and alert opt-ins
dominikletica Jun 14, 2026
241df2a
Gate Mercure rotation recovery after stop
dominikletica Jun 14, 2026
b1be64b
Harden alert inbox and auto dismiss edges
dominikletica Jun 14, 2026
7c918cb
Normalize configured Mercure hub URLs
dominikletica Jun 14, 2026
7b60282
Harden consent cookies and alert dispatch
dominikletica Jun 14, 2026
f6188af
Harden Mercure downloads and consent cookies
dominikletica Jun 14, 2026
ab407f0
Harden Mercure alert delivery edges
dominikletica Jun 14, 2026
f2c1a05
Harden cookie consent package validation
dominikletica Jun 14, 2026
a70977a
Harden cookie consent redirect boundaries
dominikletica Jun 14, 2026
2acab88
Harden Mercure alert transport boundaries
dominikletica Jun 14, 2026
25eb4cf
Run cookie consent filtering after response writers
dominikletica Jun 14, 2026
d1b371d
Normalize user alert topics through account UIDs
dominikletica Jun 14, 2026
01822f4
Reject unroutable package live roots
dominikletica Jun 14, 2026
013cdb3
Harden alert topic and notification preferences
dominikletica Jun 14, 2026
b2ff105
Remove native browser notifications
dominikletica Jun 14, 2026
f6c87b0
Harden cookie filtering and package alerts
dominikletica Jun 15, 2026
9dce0f9
Harden alert actions and URL guards
dominikletica Jun 15, 2026
6e6e8dd
Preserve auto-secure necessary cookies
dominikletica Jun 15, 2026
228f50c
Fall back when alert streams cannot open
dominikletica Jun 15, 2026
96ba7de
Keep operation details reopenable
dominikletica Jun 15, 2026
429de8a
Harden alert catch-up and CSS linting
dominikletica Jun 15, 2026
4e91ead
Normalize generated CSS lint inputs
dominikletica Jun 15, 2026
55c19ee
Handle CSS registry stubs in lint
dominikletica Jun 15, 2026
d07952b
Drain paginated live poll payloads
dominikletica Jun 15, 2026
537172e
Drain alert inbox before stream connect
dominikletica Jun 15, 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
1 change: 1 addition & 0 deletions .codex/framework-version-recap.md
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,7 @@ Versions were checked against the installed Composer packages, `composer.json`,
- `@symfony/stimulus-bundle`, `@hotwired/stimulus`, and `@hotwired/turbo` are in `importmap.php`.
- `assets/controllers.json` keeps optional UX Stimulus controllers lazy by default. Leave expensive controllers lazy until a template actually references them.
- React and Vue use the AssetMapper loader form of `registerReactControllerComponents()` and `registerVueControllerComponents()`; do not copy Webpack-era `require.context()` examples into this project.
- UX Translator dumps JavaScript translations to `var/translations` during `cache:warmup` or `ux:translator:warm-cache`; ensure one of those runs before AssetMapper resolves `assets/translator.js`.
- UX Icons has remote Iconify lookup disabled in `config/packages/ux_icons.yaml` so builds and CI stay offline-safe. `bin/init` and `assets:rebuild` run `ux:icons:lock` to import referenced icons into `assets/icons` when Iconify is reachable; failures are non-blocking warnings so offline CI and admin rebuilds do not fail only because remote icon lookup is unavailable.
- `bin/lint` validates static Twig icon references locally without network access or writes. It checks `ux_icon('...')` and `<twig:ux:icon name="...">` references against `assets/icons`, resolving configured aliases first; use `ux:icons:lock` only as the mutating import step.
- Commit locked SVGs under `assets/icons` as reviewable dependency snapshots. Avoid committing complete upstream icon sets by default; let the set grow from real template usage and explicit aliases.
Expand Down
9 changes: 3 additions & 6 deletions .env
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@

###> symfony/framework-bundle ###
APP_ENV=dev
APP_SECRET='d3f4uLt_$3cR3t'
APP_SECRET='local-default-app-secret-not-secure'
APP_SHARE_DIR=var/share
APP_DEBUG=false
APP_MAINTENANCE=false
Expand All @@ -42,12 +42,9 @@ MAILER_DSN=null://null
LOCK_DSN=flock
###< symfony/lock ###

###> symfony/mercure-notifier ###
MERCURE_DSN=mercure://default
###< symfony/mercure-notifier ###

###> symfony/mercure-bundle ###
MERCURE_URL=${DEFAULT_URI}/.well-known/mercure
MERCURE_HUB_LISTEN=127.0.0.1:3000
MERCURE_URL=http://${MERCURE_HUB_LISTEN}/.well-known/mercure
MERCURE_PUBLIC_URL=${DEFAULT_URI}/.well-known/mercure
MERCURE_JWT_SECRET=${APP_SECRET}
###< symfony/mercure-bundle ###
Expand Down
2 changes: 1 addition & 1 deletion .env.test
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
KERNEL_CLASS='App\Kernel'
APP_DEBUG=false
APP_MAINTENANCE=false
APP_SECRET='t35t1nG_$3cR3t'
APP_SECRET='test-environment-app-secret-not-secure'
###< symfony/framework-bundle ###

###> doctrine/doctrine-bundle ###
Expand Down
15 changes: 10 additions & 5 deletions .github/PULL_REQUEST_TEMPLATE.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,9 @@

## Testing
- [ ] `bin/phpunit`: [RESULT]
- [ ] Other (describe):
- [ ] `bin/jstest`: [RESULT]
- [ ] `bin/lint`: [RESULT]
- [ ] Other (if not already covered by the full suites above):

## Documentation
- [ ] Updated project readme (`README.md`)
Expand All @@ -13,10 +15,13 @@
- [ ] Updated dev/user manuals (`dev/manual/*.md` / `docs/*.md`)

## Additional Checks
- [ ] Security/privacy considerations
- [ ] Project rules, architecture/naming drift, and documentation drift reviewed (see #57) for details
- [ ] Security/privacy considerations, public entry points, sessions, secrets, and browser storage reviewed
- [ ] Package/module boundaries, access levels, route/API/live endpoint scopes, and collision risks reviewed
- [ ] Setup/init/CI, cross-platform behavior, disabled-feature fallbacks, and process/env handling reviewed
- [ ] Project-rules-, architecture-, naming- and documentation-drift reviewed (see #57 for details)
- [ ] Follow-up tasks captured in WORKLOG
- [ ] Linked issues / discussions
- [ ] Updated / aligned translations
- [ ] Updated / aligned translations and user-facing copy

## Linked Issues / Discussions

## Review Notes
5 changes: 4 additions & 1 deletion .github/workflows/pr-verify.yml
Original file line number Diff line number Diff line change
Expand Up @@ -62,5 +62,8 @@ jobs:
if: matrix.lint
run: php bin/lint

- name: Run test suite
- name: Run PHPUnit test suite
run: php bin/phpunit

- name: Run JavaScript test suite
run: php bin/jstest
4 changes: 2 additions & 2 deletions .manifest
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@
# APP_CHANNEL defines the target branch inside the specified repository.

##> aavion/studio manifest ###
APP_VERSION=0.2.0
APP_DATE=2026-05-24
APP_VERSION=0.2.4
APP_DATE=2026-06-14
APP_NAME=Studio
APP_AUTHOR=Dominik Letica
APP_DESCRIPTION=Symfony 8.1 based content-management system for structured project websites.
Expand Down
5 changes: 3 additions & 2 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -109,12 +109,13 @@
- `php -l <path>` checks PHP syntax for a changed file.
- `php bin/console lint:container` validates Symfony container wiring after service or configuration changes.
- `php bin/console tailwind:build` compiles Tailwind CSS.
- `php bin/console asset-map:compile` refreshes AssetMapper output and importmap pins.
- `php bin/console asset-map:compile` is production/release-only. Do not run it for local development or normal verification; if `public/assets/` is created locally, remove that generated production output from the worktree.
- `php bin/console ux:icons:lock` imports referenced Symfony UX/Iconify icons into `assets/icons`; commit the resulting SVGs as versioned UI dependency snapshots, but avoid bulk-locking complete icon sets without a concrete need.
- `php bin/console doctrine:migrations:diff` generates schema migrations.
- `php bin/console doctrine:migrations:migrate` applies schema migrations.
- `php bin/phpunit` runs the full PHPUnit suite.
- `php bin/phpunit --coverage-text` runs PHPUnit with quick coverage feedback before PRs.
- `bin/jstest` runs native Node.js JavaScript behavior tests from `tests/assets/**/*.test.mjs` through `node --test`; pass test files or Node test-runner options for focused runs. If Node.js is not available, the command prints a skip notice and exits successfully so only real JavaScript test failures fail CI.
- `bin/lint` includes the translation source catalogue file/key comparison for release-safe validation without requiring `.codex/`.
- Before committing, use `bin/lint --diff` or the relevant focused `bin/lint <path...>` for Git-aware whitespace checks. Markdown files may contain intentional two-space hard line breaks; preserve those hard breaks when reviewing whitespace output from raw Git commands.
- `php bin/console render:route /<route>` renders a route for Twig, translation, and debug user/role review.
Expand All @@ -123,7 +124,7 @@
- PHP-only logic: run targeted PHPUnit coverage and `php -l` for edited PHP files.
- Service, DI, security, or configuration changes: run targeted tests and `php bin/console lint:container`.
- Twig, translation, or UX copy changes: run `bin/lint <changed translation/template paths...>` and render affected routes with `php bin/console render:route /<route>` when available.
- Asset or Stimulus changes: prefer `bin/lint <changed path...>` for focused JavaScript, JSON, CSS, YAML, Twig, Markdown, and PHP syntax checks, then run the relevant asset build command and targeted UI/functional checks when build output or rendering can change.
- Asset or Stimulus changes: prefer `bin/lint <changed path...>` for focused JavaScript, JSON, CSS, YAML, Twig, Markdown, and PHP syntax checks, run `bin/jstest` or focused `bin/jstest <test-file...>` when DOM-free JavaScript behavior can be covered, then run the relevant development asset build command and targeted UI/functional checks when build output or rendering can change. Do not use production-only `asset-map:compile` for local verification.
- Focused CSS checks use the strict CSS parser and may report Tailwind-specific directives or generated modern at-rules such as `@apply`, `@theme`, or `@supports` as unsupported syntax; treat the accompanying linter note as context, and use `php bin/console tailwind:build` for the authoritative full Tailwind validation.
- Doctrine mapping or entity changes: generate or update migrations and run tests covering persistence behavior.
- Documentation changes: run `bin/lint <changed markdown paths...>` for Markdown parse coverage, then verify style, relative links, and alignment with current behavior.
Expand Down
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
# Studio

> **Version**: 0.2.0
> **Version**: 0.2.4
> **Status**: Active development
> **Updated**: 2026-06-01
> **Updated**: 2026-06-14
> **Owner**: Dominik Letica
> **Purpose:** A Symfony-based CMS foundation for structured, extensible project websites.

Expand Down
4 changes: 0 additions & 4 deletions assets/app.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,5 @@ import './js/packages/extension.js';
import './js/packages/frontend-theme.js';
import './js/packages/backend-theme.js';

import alpine from 'alpinejs';
window.Alpine = alpine;
alpine.start();

registerReactControllerComponents();
registerVueControllerComponents();
6 changes: 0 additions & 6 deletions assets/controllers.json
Original file line number Diff line number Diff line change
Expand Up @@ -51,12 +51,6 @@
}
}
},
"@symfony/ux-notify": {
"notify": {
"enabled": true,
"fetch": "lazy"
}
},
"@symfony/ux-react": {
"react": {
"enabled": true,
Expand Down
Loading