- HTML 44.6%
- Ruby 33.8%
- CSS 11.6%
- JavaScript 8.2%
- Dockerfile 1.6%
- Other 0.2%
|
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
|
||
|---|---|---|
| app | ||
| bin | ||
| config | ||
| db | ||
| docs | ||
| lib/tasks | ||
| log | ||
| public | ||
| script | ||
| test | ||
| tmp | ||
| vendor | ||
| .dockerignore | ||
| .gitattributes | ||
| .gitignore | ||
| .rubocop.yml | ||
| .ruby-version | ||
| .woodpecker.yaml | ||
| config.ru | ||
| docker-compose.yml | ||
| Dockerfile | ||
| Gemfile | ||
| Gemfile.lock | ||
| Rakefile | ||
| README.md | ||
palinks
Personal link hub and portfolio — a multi-user dashboard for curating, sharing, and tracking URLs. What started as a personal bookmarks page is becoming the front door to Lucas Draney's platform: a place for clients, leads, and collaborators to discover services, and for Lucas to control what each audience sees.
Every visitor's activity is tracked from their first pageview. Anonymous users get a local experience; authenticated users (via Keycloak) unlock feature flags, personalized views, and contact channels. Lucas controls link visibility per role, making palinks both a daily-driver new-tab page and a public-facing portfolio.
Repo: forgejo.tail5b443a.ts.net/ldraney/palinks Live: palinks.tail5b443a.ts.net
Docs
- Architecture — system diagrams, data model, infrastructure
- Infrastructure — cross-repo deployment, provisioning, secrets
- Pipeline — CI/CD flow from push to live
- Custom Domain — routing palinks.app to production
- Visibility — access tiers and role-based link filtering
- Feature Flags — flag types, resolution order, how to add a flag
- Auth — Keycloak OIDC integration and session management
- User Stories — core flows and acceptance criteria
- Rails Notes — how the Rails pieces fit together
Tech Stack
- Backend: Ruby on Rails 8.1 (Hotwire + Propshaft, plain CSS)
- Database: PostgreSQL 17 (docker-compose dev, CNPG cluster prod)
- Auth: Keycloak (SSO, role-based access)
- CI: Woodpecker CI (Kaniko builds via Harbor base image)
- Deploy: ArgoCD + Image Updater (auto-deploy on push to main)
- Ingress: Tailscale funnel (TLS termination)
- Git: Forgejo (self-hosted)
Local Development
docker compose up
docker compose exec web rails db:create db:migrate
App runs at http://localhost:9999. Code changes picked up automatically via volume mount.