My personal website and blog. 👉 https://www.llun.me
- Next.js 15 with App Router
- Tailwind CSS for styling
- next-themes for dark mode support
- Lucide React for icons
- Mapbox GL for interactive maps
- Install all dependencies with
yarn install - Add
.env.localwith these environment variables:NEXT_PUBLIC_DOMAIN- Domain name for localhost, default:http://127.0.0.1:3000. Used for links in the page so local links work properly. Set tohttps://llun.mein GitHub Actions.STRAVA_TOKEN- Strava access token with access toread_allandactivity:read_allscopes for fetching Strava activities and details.AWS_ACCOUNT_ID- AWS Account IDAWS_ACCESS_KEY_ID- AWS Key for running infrastructure codeAWS_CLOUDFRONT_DISTRIBUTION- CloudFront distribution IDAWS_SECRET_ACCESS_KEY- AWS Secret for running infrastructure codeMAPBOX_PUBLIC_KEY- Mapbox API key for interactive maps
# Start development server
yarn dev
# Build for production
yarn build
# Run linting
yarn lint- Imports should be organized in the following order:
- Third-party library imports
- Local application imports
- CSS/style imports
- Each import section should be separated by a blank line
- Imports should be sorted alphabetically within each section
The site is deployed using the following services:
- S3 buckets for storing all blog contents and images
- GitHub stores original content
- GitHub Actions builds blog contents and deploys to S3
- CloudFront in front of S3 Buckets and ActivityPub server in Vercel
- CloudFront routes requests to the appropriate origin based on domain
- When changing ActivityPub server domain, update
infrastructure/functions/updateHost/index.jsscript to the new domain - Most icons are from favicon.io except the GitHub icon