Skip to content

Add LinkTree-style Landing Page#9

Merged
vpetersson merged 13 commits intomasterfrom
links-page
Jan 11, 2026
Merged

Add LinkTree-style Landing Page#9
vpetersson merged 13 commits intomasterfrom
links-page

Conversation

@vpetersson
Copy link
Owner

@vpetersson vpetersson commented Jul 26, 2025

Summary

Adds a customizable LinkTree-style landing page with Catppuccin theming, making DSLF a complete self-hosted alternative to both bit.ly and Linktree.

What's New

  • Landing page: Profile, social links, custom links with YAML config
  • 4 Catppuccin themes: Mocha, Macchiato, Frappé, Latte
  • SEO files: Auto-generated sitemap.xml and robots.txt
  • Accessibility: Skip links, focus states, reduced motion support
  • Theme-aware 404 page

Config Example

profile:
  name: "Your Name"
  bio: "Your bio"
theme:
  preset: "mocha"
social:
  github: "https://github.com/username"

Test Plan

  • 45 TypeScript + 45 Rust tests pass
  • Docker build succeeds
  • All theme presets render correctly

- Install Bun and dependencies in CI
- Run TypeScript linting with zero warnings
- Run formatting checks with Prettier
- Run comprehensive TypeScript test suite
- Build frontend assets to verify compilation
- Add Link Index Page to Features section
- Document complete YAML configuration format
- Include all supported social platforms
- Highlight SEO and accessibility features
- Add Docker deployment examples with link index
- Update Development section with Bun workflow
- Document TypeScript testing and quality checks
- Add prerequisites and build instructions
@vpetersson vpetersson changed the title Adds 404 page feat: add customizable Link Index page builder Jul 26, 2025
Add a beautiful, customizable landing page feature alongside the existing
link shortener. The page uses the Catppuccin color palette and is fully
optional - disabled when link-index.yaml is not present.

Key changes:

- Add LinkTree page generator with Catppuccin theme support (mocha,
  macchiato, frappe, latte)
- Implement type-safe YAML config parsing with Zod validation
- Add 404 error page with consistent theming
- Refactor to fork-friendly setup: config files are now .example
  templates with actual configs gitignored
- Add Docker build args (REDIRECTS_FILE, LINKTREE_FILE) for flexibility
- Update Dockerfile to use Chainguard images throughout
- Add ESLint, Prettier, and comprehensive test suite (45 tests, 92% coverage)
- Refactor README for clarity and better documentation

New files:
- templates/config/parser.ts - Zod-based YAML parser
- templates/config/schema.ts - Type-safe config schemas
- templates/theme/generator.ts - CSS custom properties generator
- templates/theme/presets.ts - Catppuccin color presets

Breaking changes:
- redirects.csv renamed to redirects.csv.example
- Users must copy .example files to create their own configs
UI/UX Improvements:
- Add reduced motion support for accessibility
- Add skip links for keyboard navigation
- Enhance focus states with theme-aware outlines
- Increase touch targets to 56px (accessibility compliant)
- Add fluid typography with clamp() for responsive text
- Reduce particle animations (2 particles, slower, lower opacity)
- Replace 404 pulse animation with subtle gradient shift
- Add active/pressed states for interactive elements
- Use dynamic viewport height (dvh) for mobile browsers
- Add avatar hover effects

Theme & 404 Page:
- Make 404 page theme-aware (reads from config)
- Add color-scheme and referrer meta tags

SEO:
- Add sitemap.xml and robots.txt generator
- Add seo.site_url config option for sitemap generation
- Suppress favicon.ico request logging

Version: 1.2.0
@vpetersson vpetersson changed the title feat: add customizable Link Index page builder Add LinkTree-style Landing Page Jan 11, 2026
@vpetersson vpetersson merged commit bb79bfd into master Jan 11, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant