A clean, modern personal links page built with Next.js and Tailwind CSS.
- Responsive Design: Mobile-first approach with modern UI/UX
- Social Media Integration: Links to various social platforms
- Fast Loading: Optimized for performance with Next.js
- Modern Styling: Built with Tailwind CSS and shadcn/ui components
- Node.js 18+
- npm or yarn
-
Clone the repository:
git clone <repository-url> cd personal-links
-
Install dependencies:
npm install
-
Run the development server:
npm run dev
-
Open http://localhost:3000 in your browser.
npm run build
npm startEdit src/app/page.tsx to add or modify links:
<Button variant="outline" className="w-full" asChild>
<Link href="https://your-link.com">
Your Link Text
</Link>
</Button>Update the profile section in src/app/page.tsx:
<h1 className="text-2xl font-bold">Your Name</h1>
<p className="text-muted-foreground mt-2">Your bio/description</p>Modify the social media section in src/app/page.tsx to add or change social links.
Replace /public/keith.jpg with your own image and update the reference in src/app/page.tsx.
- Framework: Next.js 15
- Styling: Tailwind CSS
- UI Components: shadcn/ui (Radix UI)
- TypeScript: For type safety
- Icons: Custom SVG icons
src/
├── app/
│ ├── globals.css
│ ├── layout.tsx
│ └── page.tsx
├── components/
│ └── ui/
│ ├── button.tsx
│ └── card.tsx
└── lib/
└── utils.ts
To learn more about Next.js, take a look at the following resources:
- Next.js Documentation - learn about Next.js features and API.
- Learn Next.js - an interactive Next.js tutorial.
Railway is a modern platform that makes it easy to deploy your Next.js applications with just a few clicks. It offers a seamless deployment experience with built-in CI/CD, automatic HTTPS, and easy environment variable management.
- Simple Deployment: Connect your GitHub repository and deploy with a single click
- Automatic Updates: Automatically deploy when you push to your repository
- Built-in Databases: Easily add PostgreSQL, MySQL, Redis, and more
- Custom Domains: Connect your own domain with automatic HTTPS
- Monitoring & Logs: Real-time logs and metrics for your application
- Sign up for Railway using this referral link to receive $5 in free credits
- Connect your GitHub repository
- Configure your environment variables
- Deploy your application
Railway simplifies your infrastructure stack with a single, scalable, easy-to-use platform, allowing you to focus on building your application rather than managing infrastructure.
This same Next.js service exposes POST /v1/ai-analysis and GET /health. Configure these private Railway variables:
OPENROUTER_API_KEYREVENUECAT_SECRET_API_KEYREVENUECAT_ENTITLEMENT_ID(defaults toPro)
The app defaults to openai/gpt-5.6-sol and anthropic/claude-opus-5. The optional OPENROUTER_OPENAI_MODEL and OPENROUTER_ANTHROPIC_MODEL variables can override those defaults without a code release.
Never commit secret values. The API checks the RevenueCat entitlement and forwards aggregate health summaries without storing request bodies.
POST /v2/ai-analysis adds mode (everyday or deep) and expected_model
to the existing provider, prompt, and health_summary body. It returns
content and the verified model. The server restricts routing to:
| Provider | Everyday | Deep |
|---|---|---|
| OpenAI | openai/gpt-6.1-sol |
openai/gpt-6-astra |
| Anthropic | anthropic/claude-opus-5.5 |
anthropic/claude-fable-5.1 |
Both routes verify the existing RevenueCat Pro entitlement on every request.
Subscription service failures return 503 rather than incorrectly asking a paying
customer to subscribe again. Incomplete or mismatched-model answers cannot count
as success. No automatic provider fallback or retry is introduced. Budgets remain
8,000 output tokens for OpenAI and 4,000 for Anthropic, including reasoning. The
Anthropic input character limit is 120,000; oversized summaries get an error
instead of silent truncation. Life Context is data, never instructions; missing
dates cannot establish timing or causation.
v1 keeps its older provider-only request/response shape and default model choices.
The personal links page and /health are unchanged. macOS client coordination:
https://github.com/krumjahn/MacHealthAnalyzer/pull/45
Production was traced on 14 October 2026 from Cloudflare's DNS record to Railway:
project peaceful-peace, service App, environment production, repository
krumjahn/LinkInBio. Both link.rumjahn.com and api.applehealthdata.com use this
service. The marketing website applehealthdata.com remains on GitHub Pages with
its existing Cloudflare website Worker. Never deploy the standalone Node proxy
from the Mac repository over this Next.js service: that would remove the links page.
Before deployment, run npm test, npm run build, and git diff --check.
After deployment, check the links page, /health, v1 compatibility, v2 rejection
of missing/expired identity, and real paid requests using an owned active Pro
account. A passing health check or mocked entitlement is not a paid journey test.
Keep the app release blocked until the last check passes.
The inherited subscriber-ID header is not cryptographic authentication. The per-process limiter is now keyed by identity, independent of client-supplied forwarding headers; use stronger identity binding and shared edge limits before increasing spend or scaling instances. Request bodies and identity headers must not be logged by the host or reverse proxy. Errors do not log upstream messages.