Add application source code, configs and assets

- Controllers, Entity, Repository, Services, Twig extensions
- Templates (account, emails, home, legal, security, unsubscribe)
- Symfony config updates (bundles, security, framework, services)
- Vite + Bun setup with PostCSS
- Caddy config, CLAUDE.md, README
- Update .gitignore (node_modules, .idea, cert)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Serreau Jovann
2026-03-18 20:16:01 +01:00
parent af9c1a6ab7
commit 8193930f60
57 changed files with 6769 additions and 2926 deletions

View File

@@ -280,7 +280,7 @@ use Symfony\Component\Config\Loader\ParamConfigurator as Param;
* }>,
* },
* asset_mapper?: bool|array{ // Asset Mapper configuration
* enabled?: bool|Param, // Default: true
* enabled?: bool|Param, // Default: false
* paths?: array<string, scalar|Param|null>,
* excluded_patterns?: list<scalar|Param|null>,
* exclude_dotfiles?: bool|Param, // If true, any files starting with "." will be excluded from the asset mapper. // Default: true
@@ -938,20 +938,6 @@ use Symfony\Component\Config\Loader\ParamConfigurator as Param;
* intercept_redirects?: bool|Param, // Default: false
* excluded_ajax_paths?: scalar|Param|null, // Default: "^/((index|app(_[\\w]+)?)\\.php/)?_wdt"
* }
* @psalm-type StimulusConfig = array{
* controller_paths?: list<scalar|Param|null>,
* controllers_json?: scalar|Param|null, // Default: "%kernel.project_dir%/assets/controllers.json"
* }
* @psalm-type TurboConfig = array{
* broadcast?: bool|array{
* enabled?: bool|Param, // Default: true
* entity_template_prefixes?: list<scalar|Param|null>,
* doctrine_orm?: bool|array{ // Enable the Doctrine ORM integration
* enabled?: bool|Param, // Default: true
* },
* },
* default_transport?: scalar|Param|null, // Default: "default"
* }
* @psalm-type TwigExtraConfig = array{
* cache?: bool|array{
* enabled?: bool|Param, // Default: false
@@ -966,10 +952,10 @@ use Symfony\Component\Config\Loader\ParamConfigurator as Param;
* enabled?: bool|Param, // Default: false
* },
* cssinliner?: bool|array{
* enabled?: bool|Param, // Default: false
* enabled?: bool|Param, // Default: true
* },
* inky?: bool|array{
* enabled?: bool|Param, // Default: false
* enabled?: bool|Param, // Default: true
* },
* string?: bool|array{
* enabled?: bool|Param, // Default: false
@@ -1455,6 +1441,146 @@ use Symfony\Component\Config\Loader\ParamConfigurator as Param;
* generate_final_classes?: bool|Param, // Default: true
* generate_final_entities?: bool|Param, // Default: false
* }
* @psalm-type EndroidQrCodeConfig = array<string, mixed>
* @psalm-type LiipImagineConfig = array{
* resolvers?: array<string, array{ // Default: []
* web_path?: array{
* web_root?: scalar|Param|null, // Default: "%kernel.project_dir%/public"
* cache_prefix?: scalar|Param|null, // Default: "media/cache"
* },
* aws_s3?: array{
* bucket?: scalar|Param|null,
* cache?: scalar|Param|null, // Default: false
* use_psr_cache?: bool|Param, // Default: false
* acl?: scalar|Param|null, // Default: "public-read"
* cache_prefix?: scalar|Param|null, // Default: ""
* client_id?: scalar|Param|null, // Default: null
* client_config?: list<mixed>,
* get_options?: array<string, scalar|Param|null>,
* put_options?: array<string, scalar|Param|null>,
* proxies?: array<string, scalar|Param|null>,
* },
* flysystem?: array{
* filesystem_service?: scalar|Param|null,
* cache_prefix?: scalar|Param|null, // Default: ""
* root_url?: scalar|Param|null,
* visibility?: "public"|"private"|"noPredefinedVisibility"|Param, // Default: "public"
* },
* }>,
* loaders?: array<string, array{ // Default: []
* stream?: array{
* wrapper?: scalar|Param|null,
* context?: scalar|Param|null, // Default: null
* },
* filesystem?: array{
* locator?: "filesystem"|"filesystem_insecure"|Param, // Using the "filesystem_insecure" locator is not recommended due to a less secure resolver mechanism, but is provided for those using heavily symlinked projects. // Default: "filesystem"
* data_root?: list<scalar|Param|null>,
* allow_unresolvable_data_roots?: bool|Param, // Default: false
* bundle_resources?: array{
* enabled?: bool|Param, // Default: false
* access_control_type?: "blacklist"|"whitelist"|Param, // Sets the access control method applied to bundle names in "access_control_list" into a blacklist or whitelist. // Default: "blacklist"
* access_control_list?: list<scalar|Param|null>,
* },
* },
* flysystem?: array{
* filesystem_service?: scalar|Param|null,
* },
* asset_mapper?: array<mixed>,
* chain?: array{
* loaders?: list<scalar|Param|null>,
* },
* }>,
* driver?: scalar|Param|null, // Default: "gd"
* cache?: scalar|Param|null, // Default: "default"
* cache_base_path?: scalar|Param|null, // Default: ""
* data_loader?: scalar|Param|null, // Default: "default"
* default_image?: scalar|Param|null, // Default: null
* default_filter_set_settings?: array{
* quality?: scalar|Param|null, // Default: 100
* jpeg_quality?: scalar|Param|null, // Default: null
* png_compression_level?: scalar|Param|null, // Default: null
* png_compression_filter?: scalar|Param|null, // Default: null
* format?: scalar|Param|null, // Default: null
* animated?: bool|Param, // Default: false
* cache?: scalar|Param|null, // Default: null
* data_loader?: scalar|Param|null, // Default: null
* default_image?: scalar|Param|null, // Default: null
* filters?: array<string, array<string, mixed>>,
* post_processors?: array<string, array<string, mixed>>,
* },
* controller?: array{
* filter_action?: scalar|Param|null, // Default: "Liip\\ImagineBundle\\Controller\\ImagineController::filterAction"
* filter_runtime_action?: scalar|Param|null, // Default: "Liip\\ImagineBundle\\Controller\\ImagineController::filterRuntimeAction"
* redirect_response_code?: int|Param, // Default: 302
* },
* filter_sets?: array<string, array{ // Default: []
* quality?: scalar|Param|null,
* jpeg_quality?: scalar|Param|null,
* png_compression_level?: scalar|Param|null,
* png_compression_filter?: scalar|Param|null,
* format?: scalar|Param|null,
* animated?: bool|Param,
* cache?: scalar|Param|null,
* data_loader?: scalar|Param|null,
* default_image?: scalar|Param|null,
* filters?: array<string, array<string, mixed>>,
* post_processors?: array<string, array<string, mixed>>,
* }>,
* twig?: array{
* mode?: "none"|"lazy"|"legacy"|Param, // Twig mode: none/lazy/legacy (default) // Default: "legacy"
* assets_version?: scalar|Param|null, // Default: null
* },
* enqueue?: bool|Param, // Enables integration with enqueue if set true. Allows resolve image caches in background by sending messages to MQ. // Default: false
* messenger?: bool|array{ // Enables integration with symfony/messenger if set true. Warmup image caches in background by sending messages to MQ.
* enabled?: bool|Param, // Default: false
* },
* templating?: bool|Param, // Enables integration with symfony/templating component // Default: true
* webp?: array{
* generate?: bool|Param, // Default: false
* quality?: int|Param, // Default: 100
* cache?: scalar|Param|null, // Default: null
* data_loader?: scalar|Param|null, // Default: null
* post_processors?: array<string, array<string, mixed>>,
* },
* }
* @psalm-type VichUploaderConfig = array{
* default_filename_attribute_suffix?: scalar|Param|null, // Default: "_name"
* db_driver?: scalar|Param|null,
* storage?: scalar|Param|null, // Default: "file_system"
* use_flysystem_to_resolve_uri?: bool|Param, // Default: false
* twig?: scalar|Param|null, // twig requires templating // Default: true
* form?: scalar|Param|null, // Default: true
* metadata?: array{
* cache?: scalar|Param|null, // Default: "file"
* type?: scalar|Param|null, // Default: "attribute"
* file_cache?: array{
* dir?: scalar|Param|null, // Default: "%kernel.cache_dir%/vich_uploader"
* },
* auto_detection?: bool|Param, // Default: true
* directories?: list<array{ // Default: []
* path?: scalar|Param|null,
* namespace_prefix?: scalar|Param|null, // Default: ""
* }>,
* },
* mappings?: array<string, array{ // Default: []
* uri_prefix?: scalar|Param|null, // Default: "/uploads"
* upload_destination?: scalar|Param|null, // Default: null
* namer?: string|array{
* service?: scalar|Param|null, // Default: null
* options?: mixed, // Default: null
* },
* directory_namer?: string|array{
* service?: scalar|Param|null, // Default: null
* options?: mixed, // Default: null
* },
* delete_on_remove?: scalar|Param|null, // Default: true
* erase_fields?: scalar|Param|null, // Default: true
* delete_on_update?: scalar|Param|null, // Default: true
* inject_on_load?: scalar|Param|null, // Default: false
* namer_keep_extension?: scalar|Param|null, // Default: false
* db_driver?: scalar|Param|null, // Default: null
* }>,
* }
* @psalm-type ConfigType = array{
* imports?: ImportsConfig,
* parameters?: ParametersConfig,
@@ -1463,11 +1589,12 @@ use Symfony\Component\Config\Loader\ParamConfigurator as Param;
* doctrine?: DoctrineConfig,
* doctrine_migrations?: DoctrineMigrationsConfig,
* twig?: TwigConfig,
* stimulus?: StimulusConfig,
* turbo?: TurboConfig,
* twig_extra?: TwigExtraConfig,
* security?: SecurityConfig,
* monolog?: MonologConfig,
* endroid_qr_code?: EndroidQrCodeConfig,
* liip_imagine?: LiipImagineConfig,
* vich_uploader?: VichUploaderConfig,
* "when@dev"?: array{
* imports?: ImportsConfig,
* parameters?: ParametersConfig,
@@ -1478,12 +1605,13 @@ use Symfony\Component\Config\Loader\ParamConfigurator as Param;
* debug?: DebugConfig,
* twig?: TwigConfig,
* web_profiler?: WebProfilerConfig,
* stimulus?: StimulusConfig,
* turbo?: TurboConfig,
* twig_extra?: TwigExtraConfig,
* security?: SecurityConfig,
* monolog?: MonologConfig,
* maker?: MakerConfig,
* endroid_qr_code?: EndroidQrCodeConfig,
* liip_imagine?: LiipImagineConfig,
* vich_uploader?: VichUploaderConfig,
* },
* "when@prod"?: array{
* imports?: ImportsConfig,
@@ -1493,11 +1621,12 @@ use Symfony\Component\Config\Loader\ParamConfigurator as Param;
* doctrine?: DoctrineConfig,
* doctrine_migrations?: DoctrineMigrationsConfig,
* twig?: TwigConfig,
* stimulus?: StimulusConfig,
* turbo?: TurboConfig,
* twig_extra?: TwigExtraConfig,
* security?: SecurityConfig,
* monolog?: MonologConfig,
* endroid_qr_code?: EndroidQrCodeConfig,
* liip_imagine?: LiipImagineConfig,
* vich_uploader?: VichUploaderConfig,
* },
* "when@test"?: array{
* imports?: ImportsConfig,
@@ -1508,11 +1637,12 @@ use Symfony\Component\Config\Loader\ParamConfigurator as Param;
* doctrine_migrations?: DoctrineMigrationsConfig,
* twig?: TwigConfig,
* web_profiler?: WebProfilerConfig,
* stimulus?: StimulusConfig,
* turbo?: TurboConfig,
* twig_extra?: TwigExtraConfig,
* security?: SecurityConfig,
* monolog?: MonologConfig,
* endroid_qr_code?: EndroidQrCodeConfig,
* liip_imagine?: LiipImagineConfig,
* vich_uploader?: VichUploaderConfig,
* },
* ...<string, ExtensionType|array{ // extra keys must follow the when@%env% pattern or match an extension alias
* imports?: ImportsConfig,