Commit graph

130 commits

Author SHA1 Message Date
a864ff23e8
remove env data, its set in infra repo as secrets 2026-05-10 11:00:18 +03:00
2dfc44045b
fix url for api 2026-05-09 23:18:12 +03:00
62afd2f9d6
add cors middleware 2026-05-09 23:15:11 +03:00
23ec371386
add cors 2026-05-09 23:13:17 +03:00
5081729b99
fix slash 2026-05-09 23:08:20 +03:00
236db20789
add env with api base 2026-05-09 23:05:06 +03:00
069d62b5d9
Merge branch 'fix-laravel-app-root' 2026-05-09 22:29:15 +03:00
4ca6d492e6 copy laravel app root instead of symlinking
PHP's __DIR__ follows symlinks, so an artisan symlink at
/var/lib/tide/app/artisan resolved back to the read only store
path. That made every Laravel file path ultimately resolve into
the store, including storage/logs/laravel.log and bootstrap/cache,
which Laravel must be able to write. The redirected symlinks for
those two subtrees never even got consulted because resolution
happened upstream of them.

Switch tide-prepare to copy the package contents into appRoot,
then mount /var/lib/tide/state over storage/ and bootstrap/cache/
via symlinks out of a writable parent. Now __DIR__ resolves to
the writable copy and Laravel can boot.
2026-05-09 22:29:12 +03:00
9bdabd50e7
Merge branch 'add-pdo-pgsql' 2026-05-08 16:06:39 +03:00
b8d60d088d add pdo_pgsql to backend php
Laravel connects to the production postgres database through PDO,
so the runtime interpreter must include pdo_pgsql. Without it,
tide-migrate fails on activation with 'could not find driver' and
phpfpm-tide never starts.
2026-05-08 16:06:34 +03:00
dfa5327a2b
Merge branch 'nix-deploy' 2026-05-08 10:59:38 +03:00
83f53355be add services.tide nixos module
Exposes the laravel backend behind phpfpm + nginx and the vue
frontend as a static vhost. Wires postgres, runtime tmpfiles for
laravel's writable storage/ and bootstrap/cache/, and a oneshot
tide-migrate service for migrations and config caching.
2026-05-08 10:50:17 +03:00
b7db23b6aa package vue frontend with nix 2026-05-08 10:50:11 +03:00
d7f7460601 package laravel backend with nix 2026-05-08 10:50:08 +03:00
72cdd7dc4e
merge frontend-cypress 2026-05-06 23:27:09 +03:00
d40efeec70
add cypress admin actions spec 2026-05-06 23:26:55 +03:00
db910c9431
add cypress post page spec 2026-05-06 23:26:37 +03:00
6f160ddd4e
add cypress new-post spec 2026-05-06 23:26:14 +03:00
66ad7b1a0f
add cypress profile page spec 2026-05-06 23:26:00 +03:00
84ee24c2ee
add cypress home page spec 2026-05-06 23:25:44 +03:00
07f9746316
add cypress guest-routes spec 2026-05-06 23:25:26 +03:00
910bc98197
add cypress confirm-email spec 2026-05-06 23:25:14 +03:00
9db7920f80
add cypress login spec 2026-05-06 23:25:01 +03:00
75ada812bc
add cypress signup spec 2026-05-06 23:24:50 +03:00
178193bfd8
add cypress api-driven seeding helpers
cy.signupViaApi, cy.fetchLatestConfirmToken (parses the mailpit
inbox), cy.confirmViaApi, cy.loginViaApi, cy.logoutViaApi, plus
composed seedConfirmedUser/seedAdmin/seedPostAs/seedFeaturedPost
so each spec can build its own fixture without going through
the UI for setup.
2026-05-06 23:24:26 +03:00
7f744410bf
wire mailpit and db:promote cypress tasks 2026-05-06 23:23:13 +03:00
30738b163d
add user:promote artisan command
Marks the user with the given email as an admin. Used by the
cypress harness to bootstrap an admin without a public promote
endpoint and is also useful for ops.
2026-05-06 23:23:00 +03:00
eb59f4ca2d
route dev mail through mailpit
Switch from MAIL_MAILER=log to smtp pointing at mailpit on
:1025. From-address mirrors LaravelEmailFactory's confirmation
email format. phpunit.xml keeps MAIL_MAILER=array so unit and
feature tests do not touch mailpit.
2026-05-06 23:21:48 +03:00
4ac2323a2a
add mailpit to dev shell and process-compose
Mailpit listens on 1025 (smtp) and 8025 (web ui). Backend now
depends on it as a healthy dep so dev signups can flush their
confirmation emails to mailpit instead of /dev/null.
2026-05-06 23:21:25 +03:00
effdde84a5
merge frontend-profile-and-post 2026-05-06 22:52:32 +03:00
6ffa499c79
implement profile, post, and new-post views
ProfilePage shows a user's posts and exposes a New Post button
when the logged-in user is the owner; admins see a Promote
control. PostPage shows the post, its comments, and forms for
adding/deleting comments. Post-author and admin can delete
posts; admins can feature or unfeature any post into one of
the two slots from this view.
2026-05-06 22:52:32 +03:00
bc80556d7c
merge frontend-home-and-search 2026-05-06 22:50:56 +03:00
1997870da5
implement home page with featured posts, recent posts, and user search 2026-05-06 22:50:55 +03:00
f4f2d22440
merge frontend-auth-views 2026-05-06 22:49:32 +03:00
ff071c71ca
implement signup, confirm-email, login, check-email views 2026-05-06 22:49:32 +03:00
d85d460fd1
merge frontend-auth-store 2026-05-06 22:48:22 +03:00
ae7db07ec3
add api client and auth store
apiFetch wrapper sends JSON with credentials, parses error
shapes off the backend's {error: '...'} responses, and exposes
typed helpers (apiGet, apiPost, apiDelete). Auth store now
drives the real /signup -> /confirm-email -> /login -> /me ->
/logout flow. Vite dev proxy points /api at the backend on
:8000.
2026-05-06 22:48:17 +03:00
7b00fa5f68
merge frontend-scaffold 2026-05-06 22:47:14 +03:00
568dc4aabe
scaffold blog_portal vue 3 + pinia + cypress frontend
Mirrors youngstartup/frontend/startups_portal scaffolding:
Vite, Vue 3 (composition API + script setup), TypeScript strict,
Pinia, Vue Router 5, oxlint + eslint + oxfmt, and Cypress with
db:reset / db:seed tasks. Views and the auth store are stubs
filled in by the next branches; routes and the header chrome
are wired so the build passes.
2026-05-06 22:47:09 +03:00
6f95a5b7b8
merge seeders 2026-05-06 22:38:18 +03:00
beb4ddd1e9
split seeders by domain entity
Replaces the laravel-default scaffold seeder with one file per
domain (AdminUser, User, Post, Comment) plus a config/seed.php
to source admin credentials from env. DatabaseSeeder is now a
pure orchestrator that calls the sub-seeders in dependency
order.
2026-05-06 22:38:14 +03:00
c55852ec12
merge user-search-and-admin-promote 2026-05-06 22:36:19 +03:00
a3f90d1e85
implement user search and admin promote endpoints
GET /users?q=... is public; POST /admin/users/promote is auth
required and admin-checked inside the use case.
2026-05-06 22:36:15 +03:00
56136f8bcf
test user search and admin promote endpoints 2026-05-06 22:36:10 +03:00
ac7295faf3
implement PromoteUserToAdmin use case 2026-05-06 22:34:53 +03:00
8cbc84b051
test PromoteUserToAdmin use case 2026-05-06 22:34:29 +03:00
d917e76f1b
implement SearchUsers use case 2026-05-06 22:34:08 +03:00
31a807f0ae
test SearchUsers use case 2026-05-06 22:33:22 +03:00
3c97a19e2d
merge featured-posts 2026-05-06 22:32:50 +03:00
8ac5a5b18a
implement featured post admin endpoints
Adds POST /admin/posts/feature, POST /admin/posts/unfeature
(both auth-required, admin-checked inside controller via the
use case's ForbiddenException), and public GET /posts/featured.
Post serialization now includes featureSlot.
2026-05-06 22:32:46 +03:00