Skip to content

Commit a07ad29

Browse files
committed
Rewrite documentation for portfolio-ready onboarding and demo
1 parent 0d6fd2b commit a07ad29

9 files changed

Lines changed: 397 additions & 1 deletion

File tree

CONTRIBUTING.md

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
# Contributing
2+
3+
Thanks for checking out Course Scheduler.
4+
5+
## Local development flow
6+
1. Read [`docs/SETUP.md`](docs/SETUP.md).
7+
2. Start Derby server and initialize schema.
8+
3. Open `CourseSchedulerVayunandanreddyPannalaVFP5175` in NetBeans or build via Ant.
9+
4. Validate core workflows manually:
10+
- Add semester/course/class/student
11+
- Schedule and waitlist behavior
12+
- Drop student/class and verify promotions
13+
5. Run local compile check:
14+
- `./scripts/compile-app.sh`
15+
16+
## Pull request checklist
17+
- Keep changes focused and easy to review.
18+
- Update docs when setup, behavior, or architecture changes.
19+
- Preserve existing naming/style in Java files.
20+
- Include clear testing notes in PR description.
21+
- Ensure GitHub Actions compile workflow stays green.
22+
23+
## Suggested areas for contribution
24+
- UI modernization and accessibility improvements.
25+
- Error handling and validation around duplicate/invalid input.
26+
- Unit/integration test coverage for query classes.
27+
- Better packaging and one-command local bootstrap.

README.md

Lines changed: 94 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,94 @@
1-
# CourseScheduler
1+
# Course Scheduler
2+
3+
A Java Swing desktop application for semester planning, enrollment, and waitlist management, backed by Apache Derby.
4+
5+
## Why this is portfolio-ready
6+
- Clear separation of concerns between UI (`MainFrame`), query services (`*Queries`), and data models (`*Entry`).
7+
- End-to-end workflows for both administrator and student operations.
8+
- Real relational data modeling with class capacity and waitlist promotion logic.
9+
- Configurable database connection for local or hosted Derby instances.
10+
11+
## Core features
12+
- Add and switch semesters.
13+
- Create courses and open class sections with seat limits.
14+
- Register students and manage their schedules.
15+
- Auto-waitlist students when a class is full.
16+
- Promote waitlisted students when seats open.
17+
- Display class rosters and student schedules.
18+
- Includes a polished, modernized Swing visual theme.
19+
20+
## Tech stack
21+
- Java 11
22+
- Java Swing (desktop UI)
23+
- Apache Derby (network server mode)
24+
- NetBeans/Ant project structure
25+
- GitHub Actions (compile verification CI)
26+
27+
## Architecture snapshot
28+
```mermaid
29+
flowchart LR
30+
A["MainFrame (Swing UI)"] --> B["*Queries service layer"]
31+
B --> C["DBConnection (JDBC)"]
32+
C --> D["Apache Derby"]
33+
B --> E["*Entry models"]
34+
```
35+
36+
## Repository structure
37+
- `CourseSchedulerVayunandanreddyPannalaVFP5175/` — primary NetBeans Java project
38+
- `CourseSchedulerDBVayunandanreddyPannalaVFP5175/` — existing Derby database snapshot
39+
- `database/` — schema and sample seed scripts for fresh setup
40+
- `scripts/` — local setup helpers
41+
- `docs/` — architecture, setup, and roadmap docs
42+
43+
## Quick start
44+
1. Install prerequisites listed in [`docs/SETUP.md`](docs/SETUP.md).
45+
2. Start Derby network server:
46+
- `./scripts/start-derby-server.sh`
47+
3. Initialize database (optional if using the existing snapshot):
48+
- `./scripts/create-schema.sh`
49+
4. Seed demo data (optional):
50+
- `./scripts/load-seed-data.sh`
51+
5. Run the app:
52+
- NetBeans: open `CourseSchedulerVayunandanreddyPannalaVFP5175` and click Run.
53+
- CLI one-command run: `./scripts/run-app.sh`
54+
- Additional build/run options are in [`docs/SETUP.md`](docs/SETUP.md).
55+
56+
## Configuration
57+
`DBConnection` supports environment-based configuration:
58+
59+
| Variable | Default |
60+
|---|---|
61+
| `COURSE_SCHEDULER_DB_URL` | *(unset; computed from host/port/name)* |
62+
| `COURSE_SCHEDULER_DB_HOST` | `localhost` |
63+
| `COURSE_SCHEDULER_DB_PORT` | `1527` |
64+
| `COURSE_SCHEDULER_DB_NAME` | `CourseSchedulerDBVayunandanreddyPannalaVFP5175` |
65+
| `COURSE_SCHEDULER_DB_USER` | `java` |
66+
| `COURSE_SCHEDULER_DB_PASSWORD` | `java` |
67+
68+
## Documentation
69+
- Setup and install guide: [`docs/SETUP.md`](docs/SETUP.md)
70+
- Architecture and data model: [`docs/ARCHITECTURE.md`](docs/ARCHITECTURE.md)
71+
- Portfolio growth roadmap: [`docs/ROADMAP.md`](docs/ROADMAP.md)
72+
- Demo walkthrough script: [`docs/DEMO_SCRIPT.md`](docs/DEMO_SCRIPT.md)
73+
- Resume/project bullets: [`docs/PORTFOLIO.md`](docs/PORTFOLIO.md)
74+
- GitHub launch copy kit: [`docs/GITHUB_LAUNCH_PACK.md`](docs/GITHUB_LAUNCH_PACK.md)
75+
- Common questions: [`docs/FAQ.md`](docs/FAQ.md)
76+
- Contribution guide: [`CONTRIBUTING.md`](CONTRIBUTING.md)
77+
78+
## Developer tooling
79+
- Compile locally: `./scripts/compile-app.sh`
80+
- Run app locally: `./scripts/run-app.sh`
81+
- Initialize DB schema: `./scripts/create-schema.sh`
82+
- Load demo data: `./scripts/load-seed-data.sh`
83+
- CI build check: `.github/workflows/build.yml`
84+
85+
## Interview talking points
86+
- Designed a two-role scheduling workflow (admin + student) with waitlist promotion.
87+
- Implemented database-backed scheduling constraints and queue-like seat assignment.
88+
- Structured a desktop app with maintainable query abstractions and model objects.
89+
- Documented onboarding and deployment setup for reproducibility.
90+
91+
## Legacy artifacts
92+
This repository still includes original ZIP submissions for historical reference:
93+
- `CourseSchedulerVayunandanreddyVFP5175-1.zip`
94+
- `CourseSchedulerDBVayunandanreddyPannalaVFP5175-4.zip`

docs/ARCHITECTURE.md

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
# Architecture
2+
3+
## High-level flow
4+
1. `MainFrame` handles UI events and renders tables/status text.
5+
2. Query classes (`SemesterQueries`, `CourseQueries`, `ClassQueries`, `StudentQueries`, `ScheduleQueries`, `MultiTableQueries`) encapsulate SQL operations.
6+
3. Entry classes (`StudentEntry`, `CourseEntry`, `ClassEntry`, `ScheduleEntry`, `ClassDescription`) carry data between UI and query layers.
7+
4. `DBConnection` provides a singleton JDBC connection.
8+
9+
## Module map
10+
- `MainFrame.java` — all Swing views, event handlers, and workflow orchestration.
11+
- `DBConnection.java` — Derby JDBC connection configuration.
12+
- `*Queries.java` — CRUD and lookup methods for specific tables.
13+
- `MultiTableQueries.java` — joined queries and filtered schedule views.
14+
- `*Entry.java`, `ClassDescription.java` — data containers.
15+
16+
## Data model
17+
The app uses one schema (`JAVA`) with five core tables.
18+
19+
| Table | Purpose |
20+
|---|---|
21+
| `semester` | list of active semester names |
22+
| `course` | global course catalog |
23+
| `class` | semester-specific offered courses + seat limits |
24+
| `student` | student directory |
25+
| `schedule` | enrollment records with status (`s` scheduled / `w` waitlisted) |
26+
27+
## Enrollment lifecycle
28+
- User picks student + class.
29+
- App compares class seat capacity with current scheduled count.
30+
- If seats remain, status is `s`; otherwise status is `w`.
31+
- Dropping a student/class promotes earliest waitlisted student (by timestamp) to `s`.
32+
33+
## Design notes
34+
- Query classes use prepared statements for parameterized SQL.
35+
- Waitlist behavior is implemented using status flag + insertion timestamp.
36+
- UI is functional and data-driven, but currently monolithic in one large frame class.

docs/DEMO_SCRIPT.md

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
# Demo Script (5–7 minutes)
2+
3+
Use this script in interviews, portfolio videos, or recruiter walkthroughs.
4+
5+
## 1) Project intro (30 seconds)
6+
- “This is a Java Swing course scheduler backed by Derby.”
7+
- “It supports admin workflows, student scheduling, and waitlist promotion.”
8+
- “I improved reliability, setup automation, and documentation to make it production-style.”
9+
10+
## 2) Environment startup (60 seconds)
11+
```bash
12+
export DERBY_HOME=/absolute/path/to/db-derby-10.15.2.0-bin
13+
./scripts/start-derby-server.sh
14+
./scripts/create-schema.sh
15+
./scripts/load-seed-data.sh
16+
./scripts/run-app.sh
17+
```
18+
19+
## 3) Admin workflow (2 minutes)
20+
1. Add a new semester.
21+
2. Add a course to catalog.
22+
3. Add a class section with limited seats.
23+
4. Add a new student.
24+
25+
Callout:
26+
- Show status labels and data-refresh behavior in combo boxes.
27+
28+
## 4) Student workflow (2 minutes)
29+
1. Display available classes.
30+
2. Schedule students into the same class until seats are full.
31+
3. Schedule one more student and show waitlist status.
32+
4. Display class roster to show scheduled vs waitlisted tables.
33+
34+
Callout:
35+
- Explain seat-limit logic and automatic `scheduled`/`waitlisted` status assignment.
36+
37+
## 5) Drop flow and promotion logic (1 minute)
38+
1. Drop one enrolled student from class.
39+
2. Show that earliest waitlisted student is auto-promoted.
40+
41+
Callout:
42+
- Mention timestamp ordering and deterministic waitlist promotion.
43+
44+
## 6) Engineering closeout (30 seconds)
45+
- “The repo now has setup scripts, schema/seed SQL, CI compile checks, and architecture docs.”
46+
- “I can extend this into a service-based architecture or add automated tests next.”

docs/FAQ.md

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
# FAQ
2+
3+
## Why Derby and Swing?
4+
This project began as a desktop academic scheduling app and is intentionally kept as a Java Swing + Derby stack to demonstrate core Java engineering, SQL workflow logic, and local-first setup.
5+
6+
## Does this support waitlisting?
7+
Yes. When class capacity is reached, enrollments are recorded with waitlist status and promoted by earliest timestamp when a seat opens.
8+
9+
## Can I run this without NetBeans?
10+
Yes. Use `./scripts/run-app.sh` or compile via Ant as documented in [`docs/SETUP.md`](SETUP.md).
11+
12+
## What should be improved next?
13+
Use the staged plan in [`docs/ROADMAP.md`](ROADMAP.md): automated tests, UI modularization, and eventual service/API architecture.

docs/GITHUB_LAUNCH_PACK.md

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
# GitHub Launch Pack
2+
3+
## 1) GitHub repository “About” text
4+
Java Swing + Apache Derby course scheduling app with seat-capacity enrollment, waitlist promotion, setup automation, and CI compile checks.
5+
6+
## 2) Pinned project caption (for profile)
7+
Course Scheduler — Desktop enrollment system (Java/Swing + Derby) with real scheduling constraints, waitlist queue promotion, and production-style developer onboarding.
8+
9+
## 3) Suggested topics
10+
`java` `swing` `apache-derby` `jdbc` `desktop-app` `sql` `oop` `netbeans` `ant` `github-actions`
11+
12+
## 4) Resume-ready one-liner
13+
Modernized a legacy Java Swing scheduling app by adding robust validation, waitlist correctness fixes, environment-based DB config, CI compile checks, and full onboarding docs.
14+
15+
## 5) Commit-by-commit push plan
16+
```bash
17+
cd /Users/vayu/Documents/Playground/CourseScheduler
18+
19+
git add CourseSchedulerVayunandanreddyPannalaVFP5175/src/DBConnection.java \
20+
CourseSchedulerVayunandanreddyPannalaVFP5175/src/ScheduleQueries.java \
21+
CourseSchedulerVayunandanreddyPannalaVFP5175/src/MultiTableQueries.java \
22+
CourseSchedulerVayunandanreddyPannalaVFP5175/src/ScheduleStatus.java \
23+
CourseSchedulerVayunandanreddyPannalaVFP5175/src/CourseQueries.java \
24+
CourseSchedulerVayunandanreddyPannalaVFP5175/src/ClassQueries.java \
25+
CourseSchedulerVayunandanreddyPannalaVFP5175/src/SemesterQueries.java \
26+
CourseSchedulerVayunandanreddyPannalaVFP5175/src/StudentQueries.java \
27+
CourseSchedulerVayunandanreddyPannalaVFP5175/src/MainFrame.java
28+
git commit -m "Improve scheduling correctness, validation, and UI safety"
29+
30+
git add scripts/*.sh database/*.sql
31+
git commit -m "Add local setup automation and database bootstrap scripts"
32+
33+
git add .github/workflows/build.yml .editorconfig .gitignore
34+
git commit -m "Add CI compile workflow and repository hygiene config"
35+
36+
git add README.md CONTRIBUTING.md docs/*.md
37+
git commit -m "Rewrite documentation for portfolio-ready onboarding and demo"
38+
39+
git push origin main
40+
```
41+
42+
## 6) Launch-day checklist
43+
- Update GitHub repo description and topics.
44+
- Pin this repository on your profile.
45+
- Add one screenshot or short demo GIF to `README.md`.
46+
- Mark top roadmap items as “Next”.
47+
- Share project link in resume + LinkedIn featured section.

docs/PORTFOLIO.md

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
# Portfolio Positioning
2+
3+
## Resume bullets
4+
- Built and maintained a Java Swing + Apache Derby course scheduling platform with semester, class, and student lifecycle management.
5+
- Implemented waitlist promotion logic using timestamp-ordered queue behavior to automatically fill open seats.
6+
- Added environment-driven JDBC configuration, onboarding scripts, schema/seed SQL, and CI compile checks to improve reproducibility.
7+
- Produced architecture, setup, and contribution documentation to support fast team onboarding and cleaner handoff.
8+
9+
## Project summary (for applications)
10+
Course Scheduler is a desktop enrollment system that models real-world class capacity constraints and waitlisting behavior. It includes admin and student workflows, relational persistence with Derby, and a portfolio-grade developer experience with setup automation and CI.
11+
12+
## Skills demonstrated
13+
- Java desktop development (Swing)
14+
- SQL schema/query design
15+
- Workflow modeling and business rules
16+
- DevEx improvements (automation + docs + CI)
17+
- Codebase modernization and maintainability
18+
19+
## Suggested GitHub project description
20+
“Java Swing + Derby course enrollment app with seat-capacity scheduling, waitlist promotion, and portfolio-grade setup automation.”

docs/ROADMAP.md

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
# Portfolio Roadmap
2+
3+
This roadmap prioritizes improvements that increase employer-facing impact.
4+
5+
## Phase 1: Reliability and developer experience
6+
- Add validation for duplicate schedule entries and duplicate student records.
7+
- Add safer error messages in UI (replace silent stack traces in user paths).
8+
- Add reproducible local setup with scripts (completed in this repo refresh).
9+
10+
## Phase 2: Testability and code quality
11+
- Introduce unit tests for query classes with a disposable Derby test database.
12+
- Split `MainFrame` into smaller UI/controller classes.
13+
- Centralize constants for status flags and SQL strings.
14+
15+
## Phase 3: Product polish
16+
- Modernize Swing styling and UX copy.
17+
- Add screenshot/GIF walkthrough to README.
18+
- Add export capability (CSV/PDF) for schedule and roster views.
19+
20+
## Phase 4: Advanced portfolio upgrades
21+
- Migrate to layered architecture (service + repository + UI).
22+
- Add REST API mode alongside desktop UI.
23+
- Introduce authentication roles (admin vs student login).
24+
25+
## Recommended showcase narrative
26+
“I inherited a course scheduling desktop app and turned it into a production-style portfolio project by improving setup automation, architecture docs, runtime configurability, and maintainability.”

0 commit comments

Comments
 (0)