A modern, responsive portfolio and blog website built with Next.js, featuring AI research insights, data science content, and professional services. Built with contemporary web development practices for optimal performance and SEO.
Visit the live website at randalolson.com
serve)src/
βββ app/ # Next.js App Router
β βββ blog/ # Blog listing page
β βββ search/ # Search functionality
β βββ resume/ # Resume page
β βββ work-with-me/ # Services page
β βββ [year]/[month]/[day]/[slug]/ # Dynamic blog posts
β βββ layout.tsx # Root layout
β βββ page.tsx # Homepage
β βββ globals.css # Global styles
βββ components/
β βββ layout/ # Navigation, footer
β βββ ui/ # Reusable UI components
β βββ theme-toggle.tsx # Theme switching
βββ lib/
βββ content.ts # Content loading utilities
βββ search.ts # Search functionality
βββ utils.ts # Helper functions
git clone https://github.com/rhiever/rhiever.github.io.git
cd rhiever.github.io
npm install
npm run dev
open http://localhost:3000
npm run build
This generates a static export in the dist/ directory, ready for deployment.
_posts/ directory---
layout: post
title: "Your Post Title"
date: 2025-01-15 10:00:00.000000000 -08:00
description: "Brief description for SEO"
keywords: "keyword1, keyword2, keyword3"
categories: ["category1", "category2"]
tags: ["tag1", "tag2"]
---
Your post content in Markdown...
public/assets/YYYY/MM/ directorynpm run build to regenerate static filesThis site is deployed on Railway using static export with the serve package.
railway.json configurationnpm ci && npm run buildnpx serve dist -l $PORT -s*.railway.app URLrandalolson.com)dist/serve package hosts these files with proper SPA routing (-s flag)main branch automatically trigger new deployments# Build the site
npm run build
# Test production serving locally
npm run start:prod
railway.json)The deployment is configured via railway.json:
{
"build": {
"builder": "NIXPACKS",
"buildCommand": "npm ci && npm run build"
},
"deploy": {
"startCommand": "npx serve dist -l ${PORT:-3000} -s",
"healthcheckPath": "/",
"restartPolicyType": "ON_FAILURE",
"restartPolicyMaxRetries": 3
}
}
No environment variables required for basic functionality. Railway automatically provides:
PORT - The port to bind to (Railway assigns this)Colors, fonts, and spacing are defined in tailwind.config.ts and src/app/globals.css. The design system supports:
Content and code Β© 2025 Dr. Randal S. Olson. All rights reserved.