Path: examples/MyFeed. Epic #112.
cargo run -p my_feed → open a public scrollable feed. Same journey as Symfony Demo / Fast Track: framework forms, security habits, HTML pages - not a SPA tutorial.
| Layer | Choice |
|---|---|
| UI | Server-rendered HTML + Bootstrap 5 + Quill + light Clitorine helpers |
| HTTP | Actix via serenade-http-actix::listen |
| Forms | serenade-form (CSRF default-on, escape_html) |
| View | serenade-view (path / asset / partial for HTML builders) |
| Search | serenade-search (MemorySearchAdapter; /search?q=) |
| i18n | serenade-translation catalogues en + fr; /locale/{code} cookie |
| Profiler | serenade-profiler toolbar + /_profiler (disable with MYFEED_PROFILER=0) |
| Rich text | Quill HTML sanitized with ammonia before store/render |
| Admin | Cookie login on /admin; categories via serenade-admin CRUD |
| Data | SQLite file (default .myfeed.sqlite) so restarts keep posts |
/feed + expandable composer + likes + commentsGET /search?q=in-memory post search (body + category)GET /locale/{code}sticky UI locale cookie (en/fr); post bodies stay author languagePOST /postscreate post (optional allowlisted media)POST /posts/{id}/likepublic likePOST /posts/{id}/commentspending comment/adminlogin + pending queue; categories useserenade-adminlist panel + CRUD under/admin/categories/_profilerrequest list and/_profiler/{token}detail (toolbar on HTML pages)
make myfeed
# http://127.0.0.1:8090/Embeds: YouTube (nocookie embed), SoundCloud, direct image / .mp4 URLs. See FORMS.md, VIEW.md, SECURITY.md, I18N.md, SEARCH.md, and ADMIN.md.