Deprecated: Function get_magic_quotes_gpc() is deprecated in /hermes/walnacweb04/walnacweb04ab/b2791/pow.jasaeld/htdocs/De1337/nothing/index.php on line 99

Deprecated: The each() function is deprecated. This message will be suppressed on further calls in /hermes/walnacweb04/walnacweb04ab/b2791/pow.jasaeld/htdocs/De1337/nothing/index.php on line 619

Warning: Cannot modify header information - headers already sent by (output started at /hermes/walnacweb04/walnacweb04ab/b2791/pow.jasaeld/htdocs/De1337/nothing/index.php:99) in /hermes/walnacweb04/walnacweb04ab/b2791/pow.jasaeld/htdocs/De1337/nothing/index.php on line 1169

Warning: Cannot modify header information - headers already sent by (output started at /hermes/walnacweb04/walnacweb04ab/b2791/pow.jasaeld/htdocs/De1337/nothing/index.php:99) in /hermes/walnacweb04/walnacweb04ab/b2791/pow.jasaeld/htdocs/De1337/nothing/index.php on line 1176

Warning: Cannot modify header information - headers already sent by (output started at /hermes/walnacweb04/walnacweb04ab/b2791/pow.jasaeld/htdocs/De1337/nothing/index.php:99) in /hermes/walnacweb04/walnacweb04ab/b2791/pow.jasaeld/htdocs/De1337/nothing/index.php on line 1176

Warning: Cannot modify header information - headers already sent by (output started at /hermes/walnacweb04/walnacweb04ab/b2791/pow.jasaeld/htdocs/De1337/nothing/index.php:99) in /hermes/walnacweb04/walnacweb04ab/b2791/pow.jasaeld/htdocs/De1337/nothing/index.php on line 1176

Warning: Cannot modify header information - headers already sent by (output started at /hermes/walnacweb04/walnacweb04ab/b2791/pow.jasaeld/htdocs/De1337/nothing/index.php:99) in /hermes/walnacweb04/walnacweb04ab/b2791/pow.jasaeld/htdocs/De1337/nothing/index.php on line 1176

Warning: Cannot modify header information - headers already sent by (output started at /hermes/walnacweb04/walnacweb04ab/b2791/pow.jasaeld/htdocs/De1337/nothing/index.php:99) in /hermes/walnacweb04/walnacweb04ab/b2791/pow.jasaeld/htdocs/De1337/nothing/index.php on line 1176

Warning: Cannot modify header information - headers already sent by (output started at /hermes/walnacweb04/walnacweb04ab/b2791/pow.jasaeld/htdocs/De1337/nothing/index.php:99) in /hermes/walnacweb04/walnacweb04ab/b2791/pow.jasaeld/htdocs/De1337/nothing/index.php on line 1176

Warning: Cannot modify header information - headers already sent by (output started at /hermes/walnacweb04/walnacweb04ab/b2791/pow.jasaeld/htdocs/De1337/nothing/index.php:99) in /hermes/walnacweb04/walnacweb04ab/b2791/pow.jasaeld/htdocs/De1337/nothing/index.php on line 1176

Warning: Cannot modify header information - headers already sent by (output started at /hermes/walnacweb04/walnacweb04ab/b2791/pow.jasaeld/htdocs/De1337/nothing/index.php:99) in /hermes/walnacweb04/walnacweb04ab/b2791/pow.jasaeld/htdocs/De1337/nothing/index.php on line 1176

Warning: Cannot modify header information - headers already sent by (output started at /hermes/walnacweb04/walnacweb04ab/b2791/pow.jasaeld/htdocs/De1337/nothing/index.php:99) in /hermes/walnacweb04/walnacweb04ab/b2791/pow.jasaeld/htdocs/De1337/nothing/index.php on line 1176

Warning: Cannot modify header information - headers already sent by (output started at /hermes/walnacweb04/walnacweb04ab/b2791/pow.jasaeld/htdocs/De1337/nothing/index.php:99) in /hermes/walnacweb04/walnacweb04ab/b2791/pow.jasaeld/htdocs/De1337/nothing/index.php on line 1176

Warning: Cannot modify header information - headers already sent by (output started at /hermes/walnacweb04/walnacweb04ab/b2791/pow.jasaeld/htdocs/De1337/nothing/index.php:99) in /hermes/walnacweb04/walnacweb04ab/b2791/pow.jasaeld/htdocs/De1337/nothing/index.php on line 1176

Warning: Cannot modify header information - headers already sent by (output started at /hermes/walnacweb04/walnacweb04ab/b2791/pow.jasaeld/htdocs/De1337/nothing/index.php:99) in /hermes/walnacweb04/walnacweb04ab/b2791/pow.jasaeld/htdocs/De1337/nothing/index.php on line 1176

Warning: Cannot modify header information - headers already sent by (output started at /hermes/walnacweb04/walnacweb04ab/b2791/pow.jasaeld/htdocs/De1337/nothing/index.php:99) in /hermes/walnacweb04/walnacweb04ab/b2791/pow.jasaeld/htdocs/De1337/nothing/index.php on line 1176

Warning: Cannot modify header information - headers already sent by (output started at /hermes/walnacweb04/walnacweb04ab/b2791/pow.jasaeld/htdocs/De1337/nothing/index.php:99) in /hermes/walnacweb04/walnacweb04ab/b2791/pow.jasaeld/htdocs/De1337/nothing/index.php on line 1176

Warning: Cannot modify header information - headers already sent by (output started at /hermes/walnacweb04/walnacweb04ab/b2791/pow.jasaeld/htdocs/De1337/nothing/index.php:99) in /hermes/walnacweb04/walnacweb04ab/b2791/pow.jasaeld/htdocs/De1337/nothing/index.php on line 1176

Warning: Cannot modify header information - headers already sent by (output started at /hermes/walnacweb04/walnacweb04ab/b2791/pow.jasaeld/htdocs/De1337/nothing/index.php:99) in /hermes/walnacweb04/walnacweb04ab/b2791/pow.jasaeld/htdocs/De1337/nothing/index.php on line 1176

Warning: Cannot modify header information - headers already sent by (output started at /hermes/walnacweb04/walnacweb04ab/b2791/pow.jasaeld/htdocs/De1337/nothing/index.php:99) in /hermes/walnacweb04/walnacweb04ab/b2791/pow.jasaeld/htdocs/De1337/nothing/index.php on line 1176

Warning: Cannot modify header information - headers already sent by (output started at /hermes/walnacweb04/walnacweb04ab/b2791/pow.jasaeld/htdocs/De1337/nothing/index.php:99) in /hermes/walnacweb04/walnacweb04ab/b2791/pow.jasaeld/htdocs/De1337/nothing/index.php on line 1176

Warning: Cannot modify header information - headers already sent by (output started at /hermes/walnacweb04/walnacweb04ab/b2791/pow.jasaeld/htdocs/De1337/nothing/index.php:99) in /hermes/walnacweb04/walnacweb04ab/b2791/pow.jasaeld/htdocs/De1337/nothing/index.php on line 1176

Warning: Cannot modify header information - headers already sent by (output started at /hermes/walnacweb04/walnacweb04ab/b2791/pow.jasaeld/htdocs/De1337/nothing/index.php:99) in /hermes/walnacweb04/walnacweb04ab/b2791/pow.jasaeld/htdocs/De1337/nothing/index.php on line 1176
8000 GitHub - timothyhalley/skicyclerun.com
Nothing Special   »   [go: up one dir, main page]

Skip to content

timothyhalley/skicyclerun.com

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

SkiCycleRun Adventures 🌍

A modern, high-performance blog and travel documentation platform built with Astro, featuring advanced authentication, interactive media galleries, and comprehensive content management.

✨ Features

🌐 Core Platform

  • Static Site Generation - Lightning-fast performance with Astro
  • Modern Tech Stack - React 19, TypeScript, Tailwind CSS v4
  • Responsive Design - Mobile-first, accessible interface
  • SEO Optimized - Automated sitemaps, meta tags, and structured data
  • Progressive Enhancement - Works without JavaScript, enhanced with it

πŸ” Authentication & Security

  • AWS Cognito Integration - Secure user authentication with JWT tokens
  • Protected Content - Role-based access control (GeneralUsers, PowerUsers, SuperUsers)
  • Client-side Auth State - Seamless login/logout experience
  • Secure Cookies - HTTPS-only authentication flow

πŸ“ Content Management

  • Multi-format Content - MDX, Markdown, and rich media support
  • Content Types - Travel, Technology, Programming, General posts
  • Tagging System - Advanced categorization and filtering
  • Draft System - Preview content before publishing
  • Scheduled Publishing - Future-dated content support

🎨 Interactive Features

  • Photo Galleries - Remote photo gallery integration with lazy loading
  • 3D Travel Globe - Interactive globe showing travel destinations with Three.js
  • Video Support - Embedded video content with custom layouts
  • Theme Switching - Light/dark mode with system preference detection
  • Advanced Search - Full-text search with Fuse.js

🌍 Travel & Geography

  • Geolocation Support - Latitude/longitude metadata for posts
  • Travel Documentation - Specialized layouts for travel content
  • Interactive Maps - Location visualization and exploration

πŸš€ Project Structure

/
β”œβ”€β”€ public/                    # Static assets
β”‚   β”œβ”€β”€ images/               # Optimized images
β”‚   β”œβ”€β”€ videos/               # Video content
β”‚   └── globe/                # 3D globe data
β”œβ”€β”€ src/
β”‚   β”œβ”€β”€ components/           # Reusable UI components
β”‚   β”‚   β”œβ”€β”€ AuthButton.astro  # Authentication controls
β”‚   β”‚   β”œβ”€β”€ TravelGlobe.tsx   # Interactive 3D globe
β”‚   β”‚   └── RemotePhotoGallery.tsx # Photo galleries
β”‚   β”œβ”€β”€ content/              # Content collections
β”‚   β”‚   └── blog/             # Blog posts (MDX/MD)
β”‚   β”œβ”€β”€ layouts/              # Page layouts
β”‚   β”‚   β”œβ”€β”€ MDXLayout.astro   # Rich content layout
β”‚   β”‚   └── PhotoLayout.astro # Gallery layouts
β”‚   β”œβ”€β”€ pages/                # Static routes
β”‚   β”œβ”€β”€ config/               # Configuration files
β”‚   β”‚   β”œβ”€β”€ cognito.ts        # AWS Cognito setup
β”‚   β”‚   └── types.ts          # TypeScript definitions
β”‚   └── utils/                # Utility functions
β”œβ”€β”€ scripts/                  # Build and utility scripts
└── astro.config.mjs         # Astro configuration

πŸ› οΈ Tech Stack

πŸš€ Quick Start

Prerequisites

  • Node.js 18+
  • npm or pnpm
  • AWS Cognito setup (for authentication features)

Installation

# Clone the repository
git clone https://github.com/timothyhalley/skicyclerun.com.git
cd skicyclerun.com

# Install dependencies
npm install

# Copy environment template
cp !env.example .env.development

# Start development server
npm run dev

Environment Setup

Create .env.development with your configuration:

# AWS Cognito Configuration
PUBLIC_USER_POOL_ID=your_user_pool_id
PUBLIC_USER_POOL_CLIENT_ID=your_client_id
PUBLIC_AWS_REGION=us-west-2

# API Configuration
PUBLIC_API_BASE_URL=https://your-api-gateway-url.execute-api.region.amazonaws.com

# Site Configuration
SKICYCLERUN_URL=https://localhost:4321

🧞 Commands

Command Action
npm run dev Start development server at https://localhost:4321
npm run build Build production site to ./dist/
npm run preview Preview build locally
npm run format Format code with Prettier
npm run lint Lint code with ESLint
npm run sync Sync Astro content collections

οΏ½ Authentication System

This project implements a complete authentication system using AWS Cognito with client-side JWT management.

Features

  • Hosted UI Integration - Seamless login/logout flow
  • Role-based Access - Three user tiers (General, Power, Super Users)
  • Protected Content - Posts can require authentication and specific user groups
  • JWT Validation - Client-side token verification and API integration

Setup

  1. Configure AWS Cognito:

    • Create User Pool with Hosted UI
    • Set up user groups (GeneralUsers, PowerUsers, SuperUsers)
    • Configure redirect URIs for your domain
  2. API Gateway Setup:

    • Deploy Lambda functions for protected content
    • Enable CORS for your site origins
    • Use JWT authorizers for protected endpoints
  3. Content Protection:

    ---
    title: "Protected Post"
    auth_required: true
    auth_groups: ["PowerUsers", "SuperUsers"]
    ---

🌐 Local HTTPS Development

For secure authentication testing, the project supports local HTTPS development using mkcert.

Setup HTTPS Certificates

# Install mkcert (macOS)
brew install mkcert
mkcert -install

# Generate localhost certificate
mkcert localhost 127.0.0.1 ::1

This creates localhost+2.pem and localhost+2-key.pem files that are automatically detected by the development server.

πŸ“ Content Creation

Blog Post Structure

---
type: "TRAVEL" # TRAVEL, TECH, PROGRAMMING, GENERAL
title: "Your Post Title"
description: "Post description for SEO"
pubDatetime: 2025-01-01T00:00:00Z
author: "Tim H"
tags: ["travel", "adventure"]
featured: true
draft: false

# Optional: Authentication
auth_required: true
auth_groups: ["GeneralUsers"]

# Optional: Geography
lat: 45.5017
lon: -73.5673

# Optional: Media
cover: "/images/cover.jpg"
album: "album-name-for-gallery"
---
Your content here with full MDX support!

Content Types

  • TRAVEL - Travel experiences, destinations, adventures
  • TECH - Technology reviews, tutorials, industry insights
  • PROGRAMMING - Code tutorials, development tips, tools
  • GENERAL - Personal thoughts, miscellaneous topics

🎨 Interactive Components

Travel Globe

Interactive 3D globe showing travel destinations:

<TravelGlobe />

Photo Galleries

Remote photo galleries with lazy loading:

<RemotePhotoGallery album="adventure-2024" />

Protected Content

Wrap sensitive content with authentication:

<ProtectedContentWrapper requiredGroups={["PowerUsers"]}>
  <!-- Protected content here -->
</ProtectedContentWrapper>

🚒 Deployment

Production Build

# Build for production
npm run build

# Test production build locally
npm run preview

Environment Variables

Production requires these environment variables:

SKICYCLERUN_URL=https://skicyclerun.com
PUBLIC_USER_POOL_ID=your_production_pool_id
PUBLIC_USER_POOL_CLIENT_ID=your_production_client_id
PUBLIC_API_BASE_URL=https://your-production-api.amazonaws.com

AWS CloudFront

Useful CloudFront management commands:

# List distributions
aws cloudfront list-distributions --output table --query 'DistributionList.Items[*].[Id,Origins.Items[0].DomainName]'

# Create invalidation
aws cloudfront create-invalidation --distribution-id YOUR_ID --paths "/*"

🀝 Contributing

  1. Fork the repository
  2. Create a feature branch: git checkout -b feature/amazing-feature
  3. Commit changes: git commit -m 'Add amazing feature'
  4. Push to branch: git push origin feature/amazing-feature
  5. Open a Pull Request

πŸ“„ License

This project is licensed under CC BY-NC-SA 4.0 - see the license for details.

πŸ”— Links

πŸ” SEO & Performance

SkiCycleRun Lighthouse Score

Built with ❀️ by Tim H β€’ Powered by Astro

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published
0