Skip to the content.

CSA Trimester 3 Project Checkout & CS113

CSA Trimester 3 Project Checkout & CS113

CS113

CS 113 Master Requirements Table

Learning Objective Pasted Evidence Requirement My Completion & Code File Reference GitHub Issue
Data Structures      
Collections Used Map collections to cache member analytics and summary data on the group dashboard PR #780 - pagination & member analytics integration #17 Case Study: Group Dashboard Page Refactor
Lists Managed paginated member lists and message arrays across the group dashboard PR #780 - Implement pagination and member analytics #34 Sprint 9 Progress: Nikhil
Stacks/Queues Implemented queue for bathroom pass & student management and stack-based undo/redo for messaging PR #115 - bathroom queue integration in Spring #25 Queues: Bathroom Pass & Student Management, #26 Stack: Undo/Redo Functionality
Trees Used decision tree/ML to summarize and classify chat messages PR #740 - Analytics API integration #27 Trees/ML: Summarize and Classify Chat Messages
Sets      
Dictionaries/Maps Used Maps for caching analytics data keyed by member/group ID on the group dashboard PR #780 - member analytics with Map caching #17 Case Study: Group Dashboard Page Refactor
Graphs Modeled user relationships and friend recommendations using graph structure PR #822 - graph of friends on dashboard #28 Graphs: Model User Relationships & Recommend Friends
Algorithms      
Searching      
Sorting Implemented sorting of group chat messages PR #630 - Groups Messaging & Dashboard #29 Sorting: Group Chat Messages
Hashing      
Algorithm Analysis Tracked and visualized user engagement analytics PR #780 - pagination & member analytics #31 Gamification Analytics: Track and Visualize User Engagement
Object-Oriented Design      
Abstraction Applied OOP abstraction in Spring backend models and service layers PR #108 - S3 groups & analytics API #23 OOP Methods: Backend Documentation
Encapsulation Encapsulated group, message, and analytics data in Spring entity/service classes PR #90 - S3 chat messages & shared files #23 OOP Methods: Backend Documentation
Inheritance Used Spring JPA entity inheritance for shared person/group data models PR #115 - bathroom integration with person entity #23 OOP Methods: Backend Documentation
Polymorphism Overrode Spring controller methods and API responses across multiple entity types PR #153 - group message deletion & email API #23 OOP Methods: Backend Documentation
Design Patterns Applied SRP and documented design patterns across group dashboard refactor PR #785 - SRP Refactor for Group Dashboard #21 Design Patterns: Apply & Document
Software Development      
Version Control Managed branches, commits, and merged PRs across pages and Spring repos throughout the year PR #822, PR #112 #11 Trimester 3 Start Burndown
Testing      
Build Tools Used Makefile for Jekyll builds and Maven/pom.xml for Spring Boot PR #1011 - JS + SASS implementation #63 Nikhil - Final Sprint of CSA Goals
Debugging Diagnosed and fixed WebSocket port and nginx config issues through iterative sprints PR #126 - emergency WebSocket fix to port 8589 #38 Deployment (websockets, facial stuff, etc.)
API Development Built REST APIs for analytics, group messaging, S3 file sharing, and email send with Swagger docs PR #108 - S3 groups & analytics API; PR #153 - email send + Swagger #34 Sprint 9 Progress: Nikhil
Database Integration Migrated SQLite DB and integrated Spring JPA for groups, messages, and analytics persistence PR #108; PR #90 #52 Technologist Role for Sqlite DB Migration
Deployment      
Docker Configured deployment environment including server setup on port 8589 PR #126, PR #112 #51 Deploy on 8589
DNS Configuration Configured DNS and server routing for WebSocket deployment on port 8589 PR #131 - nginx + WebSocket update #51 Deploy on 8589
Nginx Updated nginx config for WebSocket support and port routing PR #131 - nginx update; PR #126 - nginx emergency fix #51 Deploy on 8589
CI/CD GitHub Actions pipeline for automated Jekyll build and deployment on every push PR #1237 - merged to OCS pages #38 Deployment (websockets, facial stuff, etc.)
Documentation      
Code Comments Documented OOP methods and backend functions with inline comments and AGENTS.md conventions PR #1052 - AGENTS.md + naming conventions #23 OOP Methods: Backend Documentation
API Documentation Added Swagger dependency and documented REST API endpoints PR #153 - Swagger dependency added to Spring #23 OOP Methods: Backend Documentation
Help System      
Blog Portfolio      
Personal/Social Relevance Built gamification skill tree for OCS students turning CSSE onboarding into a progression-based game PR #1011 - _projects JS/SASS expansion #57 Gamify Vision
Project Impact Presented at CTE Expo; deployed bathroom pass, WebSocket chat, analytics, and gamification for real OCS classrooms PR #822 - full-stack dashboard with WebSocket, facial recognition, analytics #66 CTE Expo Report
Ethical Considerations Designed bathroom pass with bell schedule awareness and facial recognition privacy considerations PR #115 - bathroom queue + deepface integration #62 Bathroom Pass Bell Schedule

Analytics

Example PR’s

Pages:

  • https://github.com/Open-Coding-Society/pages/pull/1052
  • https://github.com/Open-Coding-Society/pages/pull/1011
  • https://github.com/Open-Coding-Society/pages/pull/785 Spring:
  • https://github.com/Open-Coding-Society/spring/pull/153
  • https://github.com/Open-Coding-Society/spring/pull/140
  • https://github.com/Open-Coding-Society/spring/pull/108

    Commits

Project Checkout: 2 Key Themes

Working in Systems

Throughout this trimester, I’ve come to appreciate that sustainable software development isn’t about building isolated, perfect features—it’s about understanding how individual pieces fit into the larger ecosystem.

No more isolation

In the past, I would often approach projects with a focus on building a single polished tool in isolation. I’d optimize locally, create elegant solutions within a narrow scope, but miss the broader picture. Working on the Pirna-pages repository has fundamentally shifted my perspective. This project isn’t just one codebase; it’s a complex system spanning multiple courses (CSSE, APCSP, APCSA), game engines, educational tools, and backend integrations.

When working on system-wide improvements, I learned to think in terms of ripple effects. Every change to a core component affects students, teachers, and future developers. This means being intentional about architecture decisions, clear about intent, and thoughtful about backwards compatibility.

Key work demonstrating this systems thinking:

Each of these required understanding not just the immediate problem, but how it connected to:

  • Teacher workflows
  • Student learning paths
  • Deployment pipelines
  • Data persistence across multiple services

Learning: Scale Requires Different Thinking

The real breakthrough came when I stopped asking “What’s the most elegant solution?” and started asking “How does this change ripple through the entire system, and how can I minimize unintended consequences?”

I now understand that as systems scale, dependencies matter more than cleverness. A transparent solution that works within established patterns is better than a brilliant solution that introduces fragility or requires others to understand your creative thinking. This humbling realization has liberated me to focus on problems that matter rather than optimizing for elegance alone.

Recent commits showing this evolution:


Collaboration

Early in my coding journey, I was very individualistic. I’d work on tasks, complete them solo, and submit them without much input or discussion. This trimester, I’ve learned that soft skills matter as much as technical skills, especially in a team environment.

Shared Teamwork

The shift happened through concrete experiences:

Live-share pair programming: Working alongside collaborators like @adikatre through VS Code Live Share, I experienced real-time code co-creation. Discussing approach while building, catching each other’s blind spots, and synthesizing ideas into better solutions than either of us would create alone.

Task reviews and burndowns: Rather than working in isolation, I now pull others into my progress early. I ask for feedback before shipping, adjust course based on input, and celebrate when someone else’s suggestion leads to a better outcome. It feels less like compromise and more like synthesis.

Including others in presentations: I learned when to step back and let teammates present their work, when to amplify their contributions, and when to speak up about technical decisions that deserve discussion.

Direct Evidence: Pull Requests & Issues

Recent PRs showing collaborative effort:

Learning When to Push and When to Pull Back

One of the most valuable lessons: knowing when to advocate strongly vs. when to listen is a superpower. I’ve learned to:

  • Advocate fiercely for technical decisions I believe in, backed by evidence and system understanding
  • Listen genuinely when others present concerns, even if I initially disagree
  • Recognize that I don’t always have the best answer, and that’s okay
  • Celebrate team wins as much as individual wins
  • Defer to domain expertise—if someone knows more than me, I follow their lead

This mindset shift has transformed collaboration from feeling like “compromise” to “synthesis.” We create better solutions together than any of us could alone, and everyone’s fingerprints are on the final product.


Conclusion: Why These Themes Matter

Looking back at where I started, I was building features in isolation. Now I’m building systems with people.

The most satisfying moment this trimester wasn’t shipping a feature that worked perfectly—it was realizing I’d helped create infrastructure that made it easier for the entire team to do their best work. And I got there not by being the smartest person in the room, but by listening, learning, and understanding that sustainable excellence is a team sport.

In the age of AI and rapidly scaling systems, working in isolation is a liability. The engineers who thrive aren’t those who produce the most clever code—they’re those who understand systems deeply, communicate clearly, and lift others up. That’s the engineer I’m becoming, and this trimester proved it’s possible to grow these skills while shipping real code that matters.