diff --git a/README.md b/README.md index ae81757..c951fb4 100644 --- a/README.md +++ b/README.md @@ -13,10 +13,71 @@ +--- -Think of it as a simpler, friendlier alternative to LeetCode β€” focused on clarity, fundamentals, and mastery through repetition. +### πŸŽ₯ Professional Development Presentation (Video): + +#### Making Java Less Boring with Project Lombok: + +This full presentation explores how Project Lombok can drastically simplify Java development by reducing boilerplate code and improving readability β€” all without sacrificing functionality. + +I take you through a real-world example from my CodeForge project, where I integrated Lombok into an existing entity class and immediately saw the benefits: + +- 120 lines of repetitive getters, setters, and constructors reduced to just 49. +- Clearer, more maintainable code. +- A few spicy bugs along the way (and what they taught me about Hibernate and reflection). +- Enhanced productivity with less boilerplate. + +#### We'll look at: + +1. What Lombok is and how it works behind the scenes (compile-time annotation magic). +1. How to integrate it cleanly using Maven. +1. The before-and-after refactor of the Challenge class. +1. Results, debugging, and lessons learned. +1. Reflections on professional growth β€” from code cleanup to clear communication. + +Throughout the talk, I blend humor with practical insights β€” proving that writing clean Java code doesn’t have to be boring. 🌢️ + +#### Watch the Full Presentation Below: + +#### Part 1: + +[![Project Documentation Presentation Part 1](https://img.youtube.com/vi/iCxZS0Pwx80/1.jpg)](https://www.youtube.com/watch?v=iCxZS0Pwx80) + +#### Part 2: + +[![Project Documentation Presentation Part 2](https://img.youtube.com/vi/JoKJuyTOpwk/1.jpg)](https://www.youtube.com/watch?v=JoKJuyTOpwk&t=7s) + + +### πŸŽ₯ Walkthrough Presentation (Video): + +#### Building an Enterprise Java Application from the Ground Up: + +This presentation is a full walkthrough of CodeForge β€” an Enterprise Java web application built from scratch to explore authentication, request lifecycles, persistence, evaluation pipelines, and real-world deployment challenges. + +Rather than relying on heavy frameworks, CodeForge intentionally embraces the servlet-level stack to expose how modern Java web applications actually work under the hood. + +- End-to-end request flow using servlets, filters, services, and DAOs. +- Authentication and authorization with AWS Cognito and custom servlet filters. +- Challenge and drill execution pipelines with outcome tracking and telemetry. +- Hibernate persistence with explicit session management and DAOs. +- Production deployment on AWS Elastic Beanstalk β€” including environment and secrets management. + +#### We'll look at: + +1. High-level architecture and system design decisions. +1. Authentication flow and request lifecycle (filters β†’ servlets β†’ services). +1. Challenge execution, evaluation logic, and telemetry logging. +1. Database persistence, entity relationships, and DAO patterns. +1. Deployment lessons learned, tradeoffs, and post-MVP next steps. +1. Throughout the walkthrough, I focus on clarity, tradeoffs, and lessons learned β€” highlighting not just what worked, but why certain decisions were made and what I would evolve next. + +#### Watch the Walkthrough Presentation Below: + +[![Project Documentation Presentation Part 1](https://img.youtube.com/vi/0w7RZdypvMs/2.jpg)](https://www.youtube.com/watch?v=0w7RZdypvMs) --- + ### Problem Statement Most coding-practice platforms (like LeetCode or HackerRank) are powerful, but they aren’t always friendly to beginners. They assume too much context, provide cryptic feedback, and emphasize leaderboards or ads over clarity. They also push learners to focus heavily on **time/space complexity metrics** and competitive performance scoring. While important for advanced preparation, these distractions can overwhelm beginners who are still working to master syntax, logic, and step-by-step problem-solving. This creates frustration and discourages learners who want *fundamentals-first* growth. @@ -27,6 +88,8 @@ Most coding-practice platforms (like LeetCode or HackerRank) are powerful, but t - **Instructor/Admin Tools**: easy challenge CRUD to keep content fresh. CodeForge’s goal is to provide a *friendlier, clarity-first alternative* to existing platforms β€” helping learners master problem-solving without distraction. +Think of it as a simpler, friendlier alternative to LeetCode β€” focused on clarity, fundamentals, and mastery through repetition. + --- ## ✨ Features (Planned / In Progress) diff --git a/docs/projects/mvp/README.md b/docs/projects/mvp/README.md index ae03630..a067eca 100644 --- a/docs/projects/mvp/README.md +++ b/docs/projects/mvp/README.md @@ -37,13 +37,6 @@ The project board groups all issues labeled `project:mvp` into a single executio - In Review - Done -## How to Add Work to This Project -- Apply the label `project:mvp` to any issue/PR that should appear on the MVP board. -- Set up a Project workflow rule in GitHub Projects: - 1. Open the project β†’ Settings β†’ Workflows - 2. Add a rule: "When issue is added to the repository and label = project:mvp β†’ Add to project" - 3. Optionally auto-set status to "Ready" - ## Labels - Required: `project:mvp` - Common: `area:security`, `area:web`, `area:service`, `area:ci-cd`, `area:deployment`, `area:logging`, `feature:cognito-auth`, `feature:pagination-jquery`, `feature:drill-mode`, `area:documentation` @@ -64,3 +57,67 @@ The project board groups all issues labeled `project:mvp` into a single executio - Labels: `docs/labels.md` - CI workflow: `.github/workflows/build.yml` - Health endpoint: `/actuator/health` + + +# CodeForge MVP – Quick Start + +This guide summarizes how to run MVP features (Practice + Drill), configure flags, and run tests. + +## How to Add Work to This Project +- Apply the label `project:mvp` to any issue/PR that should appear on the MVP board. +- Set up a Project workflow rule in GitHub Projects: + 1. Open the project β†’ Settings β†’ Workflows + 2. Add a rule: "When issue is added to the repository and label = project:mvp β†’ Add to project" + 3. Optionally auto-set status to "Ready" + +## Prerequisites +- Java 21 (Temurin recommended) +- MySQL 8.x running locally (cf_test_db) +- Maven 3.9+ + +## Config +- Edit `src/main/resources/application.properties` for feature flags: + - `features.practice.enabled=true` + - `features.drill.enabled=true` +- Database settings are loaded via environment variables or `hibernate.cfg.xml`. + +## Run (Tomcat) +- Build WAR: +```powershell +mvn -f "C:\Users\nickh\Documents\My Projects\Java\code-forge\pom.xml" -DskipTests=true package +``` +- Deploy `target/*.war` to Tomcat webapps and start Tomcat. + +## Routes +- Practice (public): + - `GET /practice/{id}` – render solve form. + - `POST /practice/{id}/submit` – evaluate and show inline feedback; no persistence. +- Drill (auth required): + - `GET /drill` – due queue + enrollment banner. + - `GET /drill/next` – redirect to next due. + - `GET /drill/{id}` – solve page with streak/seen/next due. + - `POST /drill/{id}/submit` – evaluate, persist outcome, flash message β†’ queue. + +## Evaluator +- Basic evaluator compares submission to `Challenge.expectedAnswer`. +- Outcomes: CORRECT / ACCEPTABLE / INCORRECT / SKIPPED. +- Guard: very long or blank submissions β†’ SKIPPED. + +## Telemetry +- Rolling file appender at `logs/telemetry.log`. +- Emits: `mode, challengeId, outcome, durationMs` for each run. + +## Tests +- Run all tests: +```powershell +mvn -f "C:\Users\nickh\Documents\My Projects\Java\code-forge\pom.xml" -DskipTests=false test +``` +- Notable tests: + - Evaluator unit tests (correct/acceptable/incorrect/missing/guard). + - Drill auto-enrollment unit test. + - Drill persistence test (timesSeen/nextDueAt). + +## Troubleshooting +- If Practice/Drill are disabled, servlets respond with 404. +- If DB isn’t reachable, tests may fail; ensure `DB_PASSWORD` and JDBC URL are set. +- Check `logs/telemetry.log` for evaluator run entries. diff --git a/docs/projects/pd-presentation/README.md b/docs/projects/pd-presentation/README.md new file mode 100644 index 0000000..8f669ad --- /dev/null +++ b/docs/projects/pd-presentation/README.md @@ -0,0 +1,5 @@ +This presentation can be found on YouTube: + +[![Project Documentation Presentation Part 1](https://img.youtube.com/vi/iCxZS0Pwx80/1.jpg)](https://www.youtube.com/watch?v=iCxZS0Pwx80) + +[![Project Documentation Presentation Part 2](https://img.youtube.com/vi/JoKJuyTOpwk/1.jpg)](https://www.youtube.com/watch?v=JoKJuyTOpwk&t=7s) \ No newline at end of file diff --git a/docs/projects/walkthrough-presentation/README.md b/docs/projects/walkthrough-presentation/README.md new file mode 100644 index 0000000..331a940 --- /dev/null +++ b/docs/projects/walkthrough-presentation/README.md @@ -0,0 +1,3 @@ +This presentation can be found on YouTube: + +[![Project Documentation Presentation Part 1](https://img.youtube.com/vi/0w7RZdypvMs/2.jpg)](https://www.youtube.com/watch?v=0w7RZdypvMs) \ No newline at end of file diff --git a/projects/mvp/README.md b/projects/mvp/README.md deleted file mode 100644 index 74784e5..0000000 --- a/projects/mvp/README.md +++ /dev/null @@ -1,56 +0,0 @@ -# CodeForge MVP – Quick Start - -This guide summarizes how to run MVP features (Practice + Drill), configure flags, and run tests. - -## Prerequisites -- Java 21 (Temurin recommended) -- MySQL 8.x running locally (cf_test_db) -- Maven 3.9+ - -## Config -- Edit `src/main/resources/application.properties` for feature flags: - - `features.practice.enabled=true` - - `features.drill.enabled=true` -- Database settings are loaded via environment variables or `hibernate.cfg.xml`. - -## Run (Tomcat) -- Build WAR: -```powershell -mvn -f "C:\Users\nickh\Documents\My Projects\Java\code-forge\pom.xml" -DskipTests=true package -``` -- Deploy `target/*.war` to Tomcat webapps and start Tomcat. - -## Routes -- Practice (public): - - `GET /practice/{id}` – render solve form. - - `POST /practice/{id}/submit` – evaluate and show inline feedback; no persistence. -- Drill (auth required): - - `GET /drill` – due queue + enrollment banner. - - `GET /drill/next` – redirect to next due. - - `GET /drill/{id}` – solve page with streak/seen/next due. - - `POST /drill/{id}/submit` – evaluate, persist outcome, flash message β†’ queue. - -## Evaluator -- Basic evaluator compares submission to `Challenge.expectedAnswer`. -- Outcomes: CORRECT / ACCEPTABLE / INCORRECT / SKIPPED. -- Guard: very long or blank submissions β†’ SKIPPED. - -## Telemetry -- Rolling file appender at `logs/telemetry.log`. -- Emits: `mode, challengeId, outcome, durationMs` for each run. - -## Tests -- Run all tests: -```powershell -mvn -f "C:\Users\nickh\Documents\My Projects\Java\code-forge\pom.xml" -DskipTests=false test -``` -- Notable tests: - - Evaluator unit tests (correct/acceptable/incorrect/missing/guard). - - Drill auto-enrollment unit test. - - Drill persistence test (timesSeen/nextDueAt). - -## Troubleshooting -- If Practice/Drill are disabled, servlets respond with 404. -- If DB isn’t reachable, tests may fail; ensure `DB_PASSWORD` and JDBC URL are set. -- Check `logs/telemetry.log` for evaluator run entries. -