Personal link dashboard — curated URLs with descriptions and metadata
  • HTML 44.6%
  • Ruby 33.8%
  • CSS 11.6%
  • JavaScript 8.2%
  • Dockerfile 1.6%
  • Other 0.2%
Find a file
Lucas Draney 8378c938aa
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
feat: add palinks.app to Rails config.hosts (#51) (#53)
2026-06-16 00:19:37 +00:00
app Open external links in new tabs (#48) (#49) 2026-06-13 13:36:59 +00:00
bin Align with rails-base conventions 2026-05-24 11:20:42 -06:00
config feat: add palinks.app to Rails config.hosts (#51) (#53) 2026-06-16 00:19:37 +00:00
db Create clicks table and tracking (#36) (#42) 2026-06-13 13:25:16 +00:00
docs Update custom-domain doc to reflect Hetzner edge decision (#47) 2026-06-13 13:16:19 +00:00
lib/tasks Scaffold Rails 8 app with Link model and styled views 2026-05-19 05:48:27 -06:00
log Scaffold Rails 8 app with Link model and styled views 2026-05-19 05:48:27 -06:00
public Scaffold Rails 8 app with Link model and styled views 2026-05-19 05:48:27 -06:00
script Scaffold Rails 8 app with Link model and styled views 2026-05-19 05:48:27 -06:00
test Create clicks table and tracking (#36) (#42) 2026-06-13 13:25:16 +00:00
tmp Scaffold Rails 8 app with Link model and styled views 2026-05-19 05:48:27 -06:00
vendor Scaffold Rails 8 app with Link model and styled views 2026-05-19 05:48:27 -06:00
.dockerignore Scaffold Rails 8 app with Link model and styled views 2026-05-19 05:48:27 -06:00
.gitattributes Scaffold Rails 8 app with Link model and styled views 2026-05-19 05:48:27 -06:00
.gitignore Add .playwright-mcp/ to gitignore and remove stale migration 2026-06-07 07:43:28 -06:00
.rubocop.yml Scaffold Rails 8 app with Link model and styled views 2026-05-19 05:48:27 -06:00
.ruby-version Align with rails-base conventions 2026-05-24 11:20:42 -06:00
.woodpecker.yaml Add Woodpecker CI pipeline for container builds (#7) 2026-05-24 14:16:42 +00:00
config.ru Scaffold Rails 8 app with Link model and styled views 2026-05-19 05:48:27 -06:00
docker-compose.yml Add drag-and-drop reordering for link cards (#10) 2026-05-29 11:04:51 +00:00
Dockerfile Use ruby-rails-build from Harbor as build stage 2026-05-24 11:26:35 -06:00
Gemfile Scaffold Rails 8 app with Link model and styled views 2026-05-19 05:48:27 -06:00
Gemfile.lock Scaffold Rails 8 app with Link model and styled views 2026-05-19 05:48:27 -06:00
Rakefile Scaffold Rails 8 app with Link model and styled views 2026-05-19 05:48:27 -06:00
README.md Spike: Custom domain routing for palinks.app (#25) 2026-06-08 03:16:40 +00:00

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.