Skip to content

SnapPetal/PersonalWeb

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

Thon Becker's Personal Website

A modern, feature-rich personal portfolio website built with Spring Boot, showcasing professional experience and interactive applications.

Spring Boot Java Bootstrap HTMX

๐ŸŒŸ Features

Core Portfolio

  • Professional Experience Display with dynamic year counter
  • Responsive Design using Bootstrap 5
  • Dark/Light Mode toggle for better user experience
  • Interactive Bible Verse display with caching
  • Dad Jokes Player with audio integration

Interactive Applications

  • ๐Ÿ“ Foosball Management System - Complete table soccer game tracking
  • ๐ŸŽฏ Dave Ramsey FPU Trivia - AI-powered Financial Peace University trivia with real-time multiplayer
  • ๐Ÿ“Š Statistics Dashboard - Player and team performance analytics

Technical Features

  • ๐Ÿ”’ CSRF Protection for secure form submissions
  • ๐ŸŒ Environment Configuration with AWS Cognito integration
  • โšก Caching with Caffeine for optimized performance
  • ๐Ÿ”„ Retry Logic for external API calls
  • ๐Ÿ“ฑ Progressive Web App features

๐Ÿš€ Quick Start

Prerequisites

  • Java 25+
  • Maven 3.6+
  • PostgreSQL 16+ (for local development)
  • Docker (for running PostgreSQL locally)
  • AWS Cognito setup (for authentication features)
  • AWS Bedrock access (for AI-powered trivia questions)

Installation

  1. Clone the repository

    git clone https://github.com/SnapPetal/PersonalWeb.git
    cd PersonalWeb
  2. Set up environment variables

    cp .env.example .env
    # Edit .env with your actual Cognito credentials
  3. Run the application

    mvn spring-boot:run

๐Ÿ—๏ธ Architecture

Backend Stack

  • Spring Boot 3.5.6 - Core framework
  • Spring Security - Authentication & CSRF protection
  • Spring Cloud OpenFeign - HTTP client for microservices
  • Spring WebSocket - Real-time communication for trivia
  • Spring AI with AWS Bedrock - AI-powered question generation
  • PostgreSQL 16 - Relational database
  • Liquibase - Database migration and version control
  • Caffeine Cache - In-memory caching solution
  • Thymeleaf - Server-side template engine

Frontend Stack

  • Bootstrap 5.3.8 - Responsive UI framework
  • HTMX 2.0.7 - Dynamic HTML interactions
  • Bootstrap Icons - Icon library
  • SockJS & STOMP - WebSocket communication
  • Vanilla JavaScript - Custom interactions

Integration & Services

  • AWS Cognito - OAuth2/OpenID authentication
  • External APIs - Bible verse and dad jokes integration
  • Spring Modulith - Modular monolith architecture with enforced boundaries

๐Ÿ“ Project Structure

This project follows a modular monolith architecture using Spring Modulith:

src/
โ”œโ”€โ”€ main/
โ”‚   โ”œโ”€โ”€ java/biz/thonbecker/personal/
โ”‚   โ”‚   โ”œโ”€โ”€ foosball/                  # Foosball Module
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ api/                   # Public facade interfaces
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ domain/                # Domain models (Game, Player, Stats)
โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ infrastructure/        # Implementation, persistence, web
โ”‚   โ”‚   โ”œโ”€โ”€ trivia/                    # Trivia Module
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ api/                   # Public facade interfaces
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ domain/                # Domain models (Quiz, Question)
โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ infrastructure/        # Implementation, persistence, web
โ”‚   โ”‚   โ”œโ”€โ”€ shared/                    # Shared infrastructure
โ”‚   โ”‚   โ”œโ”€โ”€ configuration/             # Spring configuration
โ”‚   โ”‚   โ””โ”€โ”€ PersonalWebApplication.java
โ”‚   โ”œโ”€โ”€ resources/
โ”‚   โ”‚   โ”œโ”€โ”€ templates/                 # Thymeleaf HTML templates
โ”‚   โ”‚   โ”œโ”€โ”€ static/                    # CSS, JS, images
โ”‚   โ”‚   โ”œโ”€โ”€ db/changelog/              # Liquibase migrations
โ”‚   โ”‚   โ””โ”€โ”€ application.yml            # Configuration
โ””โ”€โ”€ test/
    โ”œโ”€โ”€ java/                          # Unit tests
    โ””โ”€โ”€ modulith/                      # Module structure tests

See Spring Modulith Documentation for detailed module architecture.

๐Ÿ”ง Configuration

๐Ÿ” CSRF Protection

The application implements Cross-Site Request Forgery protection using Spring Security with token-based validation for all POST requests.

๐ŸŒ Environment Configuration

Configure your development environment with AWS Cognito integration using environment variables. See .env.example for required settings.

๐ŸŽฎ Applications

Foosball Management System

A complete table soccer game tracking system integrated as a Spring Modulith module:

  • Player Management - Create and track players with email validation
  • Game Recording - Record match results with team positions and scores
  • Statistics & Analytics - Comprehensive player and team performance metrics
    • Win/loss records and percentages
    • Head-to-head team statistics
    • Player rankings by various criteria
    • Game history and trends
  • Tournament System - Single-elimination tournament bracket generation
  • Database Persistence - PostgreSQL with Liquibase migrations
  • HTMX Integration - Dynamic UI updates without page reloads
  • Module Architecture - Hexagonal architecture with public facades and encapsulated implementation

Module: biz.thonbecker.personal.foosball Public API: FoosballFacade interface

Dave Ramsey FPU Trivia Game

  • AI-Powered Questions - Spring AI with AWS Bedrock generates Dave Ramsey Financial Peace University questions
  • WebSocket Integration - Real-time multiplayer gameplay using STOMP protocol
  • Difficulty Levels - Easy, Medium, and Hard question difficulty
  • Fallback Questions - 20 pre-configured FPU questions when AI is unavailable
  • Scoring System - Live leaderboard updates and winner determination
  • Database Persistence - PostgreSQL stores quiz results and player statistics
  • Event Logging - Comprehensive game session tracking

Bible Verse of the Day

  • Daily Verses - Cached daily verse retrieval
  • KJV Translation - King James Version integration
  • Retry Logic - Fault-tolerant API calls
  • Responsive Display - Mobile-optimized presentation

๐Ÿ›ก๏ธ Security Features

  • CSRF Token Protection - All POST requests secured
  • OAuth2 Integration - AWS Cognito authentication
  • Secure Headers - Spring Security configuration
  • Environment Isolation - Separate dev/prod configs

๐Ÿ”„ API Endpoints

Core APIs

  • GET /api/experience/count - Professional experience counter
  • GET /api/bible/verse-of-day - Daily bible verse
  • GET /api/joke - Dad joke with audio

Foosball APIs

REST Endpoints:

  • GET /api/foosball/players - Retrieve all players
  • GET /api/foosball/stats/players - Player statistics and rankings
  • GET /api/foosball/stats/teams - Team performance statistics
  • GET /api/foosball/games - Retrieve recent games
  • POST /api/foosball/players - Create new player
  • POST /api/foosball/games - Record new game

HTMX Endpoints:

  • GET /foosball/htmx/games - Game list partial
  • POST /foosball/htmx/games - Record game with HTMX response
  • GET /foosball/htmx/stats/players - Player stats partial
  • GET /foosball/htmx/stats/teams - Team stats partial

Tournament Endpoints:

  • GET /api/tournaments - List all tournaments
  • POST /api/tournaments - Create new tournament
  • POST /api/tournaments/{id}/register - Register player for tournament
  • POST /api/tournaments/{id}/start - Start tournament and generate bracket
  • POST /api/tournaments/matches/{matchId}/result - Record match result

๐Ÿงช Testing

# Run all tests
./mvnw test

# Run with coverage
./mvnw test jacoco:report

# Run integration tests
./mvnw verify

๐Ÿ“ฆ Deployment

Development

./mvnw spring-boot:run -Dspring-boot.run.profiles=dev

Production

# Build
./mvnw clean package -Pproduction

# Run
java -jar target/personal-0.0.1-SNAPSHOT.jar --spring.profiles.active=prod

Docker (Optional)

FROM openjdk:21-jre-slim
COPY target/personal-0.0.1-SNAPSHOT.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "/app.jar"]

๐Ÿค Contributing

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

๐Ÿ“œ License

This project is proprietary and confidential. All rights are reserved by Thon Becker. See the LICENSE file for details.

๐Ÿ“ž Contact

๐ŸŽฏ Roadmap

  • Mobile App - React Native companion app
  • Analytics Dashboard - Usage statistics and insights
  • Blog System - Technical writing platform
  • Portfolio Expansion - Additional interactive demos
  • Performance Monitoring - APM integration
  • CI/CD Pipeline - Automated deployment workflow

Built with โค๏ธ by Thon Becker | ยฉ 2025 All Rights Reserved

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •