diff --git a/.gitignore b/.gitignore
index 5ef6a52..b610f8d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -39,3 +39,6 @@ yarn-error.log*
# typescript
*.tsbuildinfo
next-env.d.ts
+
+# utils
+/agents/
\ No newline at end of file
diff --git a/agents/app-form.md b/agents/app-form.md
new file mode 100644
index 0000000..cca2420
--- /dev/null
+++ b/agents/app-form.md
@@ -0,0 +1,112 @@
+This will be the form that hackers use to apply.
+
+## Requirements
+
+- Use shadcn components for building the form UI
+- Use React Hook Form for form state management and validation
+- Allow users to save progress locally and return later to complete the application
+- Validate submissions both in the browser and on the server for correctness
+- ** For the resume upload, use a dummy function for now. We will set up S3 later.
+
+## Design
+
+- Any simple form design would suffice
+- Example from shadcn docs https://ui.shadcn.com/docs/forms/react-hook-form#complex-forms
+
+ 
+
+- Additional features like partitioning the form into paged sections or fancy UI elements (e.g., map for location input) would be fun, but beyond MVP
+
+## Questions
+
+**Personal Information**
+
+- Age: Number input (min: 18)
+- Gender: Single-select dropdown
+ - Male
+ - Female
+ - Other (please describe)
+- Ethnicity: Single-select dropdown
+ - American Indian or Alaska Native
+ - Asian
+ - Black or African American
+ - Hispanic or Latino / Latina / Latinx
+ - Middle Eastern or North African
+ - Native Hawaiian or Pacific Islander
+ - White
+ - Multiracial (please describe)
+
+**Academic Information**
+
+- University: Single-select dropdown
+ - Find a list of universities
+ - Other (please describe)
+- Country: Single-select dropdown
+ - Find a list of countries
+ - Other (describe)
+- Degree: Single-select dropdown
+ - High School
+ - Associate's
+ - Bachelor's
+ - Master's
+ - PhD
+ - Other (please describe)
+- Graduation Year: Number input (min: 2026)
+- Number of Previous Hackathons: Number input
+- Major(s): Single-select dropdown
+ - Computer Science
+ - Computer Engineering
+ - Electrical Engineering
+ - Data Science
+ - Statistics
+ - Mathematics
+ - Business
+ - Other or multiple majors (please describe)
+- Resume: PDF File upload
+
+**Essays** (min/max character limits apply)
+
+- Why do you want to attend MHacks?
+- Describe a technical challenge you've faced and how you solved it.
+- Tell us about a project you're proud of.
+- Anything else you'd like us to know? (optional)
+
+**Logistics**
+
+- Transportation Type: Single-select dropdown
+ - Driving
+ - Flying
+ - Bus
+ - Train
+ - Local
+- Where Are You Coming From?: Text input
+- Shirt Size: Single-select dropdown
+ - XS
+ - S
+ - M
+ - L
+ - XL
+ - XXL
+- Do you have any allergies or dietary restrictions?: Checkbox
+ - When checked provide textbox with “Please describe”
+- Will you require travel reimbursement to attend? Yes / No
+- If yes: If travel reimbursement cannot be provided, would you still be interested in attending MHacks?
+
+**Socials**
+
+- GitHub (optional): URL input
+- LinkedIn (optional): URL input
+- Personal Site (optional): URL input
+
+**Communications**
+
+- Did you follow us on Instagram (@mhacks_)? (optional): Checkbox
+
+**MLH & Sponsor Agreements**
+
+- I have read and agree to the MLH Code of Conduct: Checkbox (must be checked)
+- I authorize you to share my application/registration information with Major League Hacking for event administration, ranking, and MLH administration in-line with the MLH Privacy Policy. I further agree to the terms of both the MLH Contest Terms and Conditions and the MLH Privacy Policy: Checkbox (must be checked)
+- I authorize MLH to send me occasional emails about relevant events, career opportunities, and community announcements: Checkbox (must be checked)
+- I agree to receive emails from event sponsors about relevant opportunities and updates: Checkbox (optional)
+
+from amy: make sure all are present: https://guide.mlh.io/general-information/managing-registrations/registrations
diff --git a/app/applications/apply/hacker/application-form-skeleton.tsx b/app/applications/apply/hacker/application-form-skeleton.tsx
new file mode 100644
index 0000000..fbb5554
--- /dev/null
+++ b/app/applications/apply/hacker/application-form-skeleton.tsx
@@ -0,0 +1,97 @@
+import { Skeleton } from "@/components/ui/skeleton";
+import { Card, CardContent, CardHeader } from "@/components/ui/card";
+
+function SectionSkeleton({ fields = 3 }: { fields?: number }) {
+ return (
+
+
+
+
+
+ {Array.from({ length: fields }).map((_, i) => (
+
+ );
+}
diff --git a/app/applications/review/hacker/page.tsx b/app/applications/review/hacker/page.tsx
new file mode 100644
index 0000000..617c4e4
--- /dev/null
+++ b/app/applications/review/hacker/page.tsx
@@ -0,0 +1,195 @@
+import { Suspense } from "react";
+import ReviewDashboard from "./review-dashboard";
+import ReviewDashboardSkeleton from "./review-dashboard-skeleton";
+import { redirect } from "next/navigation";
+import { HackerApplicant } from "@/lib/schemas/application";
+export default async function ReviewPage() {
+ // * Perform Data Fetching from Database here
+
+ const profile = await getProfile();
+ if (profile.role != "Admin") {
+ redirect("/");
+ }
+
+ const applications = getApplicationData();
+
+ return (
+ <>
+ }>
+
+
+ >
+ );
+}
+
+const wait = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms));
+
+const getProfile = async () => {
+ await wait(1500);
+ return { role: "Admin" };
+};
+
+const getApplicationData = async () => {
+ const mock_applicants: HackerApplicant[] = [
+ {
+ id: "1",
+ user_id: "user_1",
+ name: "Alice Chen",
+ university: "University of Michigan",
+ major: "Computer Science",
+ degree: "Bachelor's",
+ graduationYear: 2026,
+ age: 21,
+ gender: "Female",
+ ethnicity: "Asian",
+ country: "United States",
+ previousHackathons: 4,
+ whyAttend:
+ "MHacks has always been on my radar as one of the premier hackathons in the midwest. I want to push my skills in ML and build something meaningful with a team. Last year I built a mental-health chatbot at HackMIT and I am excited to iterate on those ideas with the incredibly talented community MHacks attracts.",
+ technicalChallenge:
+ "During my internship at a startup I had to migrate a monolithic Flask API to microservices with zero downtime. I tackled this by implementing a strangler-fig pattern—routing traffic incrementally through a new gateway while keeping the old endpoints alive until confidence was high. The trickiest part was synchronizing database writes across services; I ended up using an outbox pattern with a Postgres trigger to fan out events.",
+ proudProject:
+ "I built StudySync, a real-time collaborative study tool that syncs Pomodoro timers and lets friends share notes via WebSockets. Over 300 students at my university use it. I designed the backend in Go, deployed on Fly.io, and added an AI summary feature using the OpenAI API.",
+ anythingElse:
+ "I play violin in the university orchestra and love hackathon karaoke nights!",
+ github: "https://github.com/alicechendev",
+ linkedin: "https://linkedin.com/in/alice-chen",
+ transportationType: "Driving",
+ comingFrom: "Ann Arbor, MI",
+ shirtSize: "S",
+ hasAllergies: false,
+ needsTravelReimbursement: false,
+ mlhCodeOfConduct: true,
+ mlhPrivacyPolicy: true,
+ mlhEmails: true,
+ status: "pending",
+ },
+ {
+ id: "2",
+ user_id: "user_2",
+ name: "Marcus Johnson",
+ university: "Georgia Institute of Technology",
+ major: "Computer Engineering",
+ degree: "Bachelor's",
+ graduationYear: 2027,
+ age: 20,
+ gender: "Male",
+ ethnicity: "Black or African American",
+ country: "United States",
+ previousHackathons: 2,
+ whyAttend:
+ "I want to attend MHacks to network with other engineers and learn from industry mentors. I have been working on embedded systems projects and I think a hackathon environment will push me to prototype faster.",
+ technicalChallenge:
+ "I had a race condition in an RTOS scheduler I was writing in C. The interrupt handler was modifying shared state without a critical section. I resolved it by using atomic operations and restructuring the ISR to queue events rather than process them inline.",
+ proudProject:
+ "I built a low-cost air quality monitor with an ESP32, a PM2.5 sensor, and a custom PCB. Data streams to a Firebase backend and displays on a React Native app. I open-sourced the hardware design and got 40 GitHub stars.",
+ github: "https://github.com/mjohnsonEE",
+ transportationType: "Flying",
+ comingFrom: "Atlanta, GA",
+ shirtSize: "L",
+ hasAllergies: false,
+ needsTravelReimbursement: true,
+ mlhCodeOfConduct: true,
+ mlhPrivacyPolicy: true,
+ mlhEmails: true,
+ status: "pending",
+ },
+ {
+ id: "3",
+ user_id: "user_3",
+ name: "Priya Patel",
+ university: "Massachusetts Institute of Technology",
+ major: "Mathematics",
+ degree: "Bachelor's",
+ graduationYear: 2026,
+ age: 22,
+ gender: "Female",
+ ethnicity: "Asian",
+ country: "United States",
+ previousHackathons: 6,
+ whyAttend:
+ "I want to collaborate with builders from diverse disciplines. As a math major who codes, I bring a rigorous analytical lens to product problems. MHacks specifically attracts the type of interdisciplinary team I thrive in.",
+ technicalChallenge:
+ "I implemented a gradient descent optimizer from scratch for a research project on sparse neural networks. The tricky part was getting numerically stable updates with float32 precision. I used Kahan summation and gradient clipping, and validated against PyTorch's built-in optimizer.",
+ proudProject:
+ "During HackMIT I led a team of four to build a real-time sign-language translation app using MediaPipe and a custom GRU model. We won first place in the accessibility track. The model achieved 94% accuracy on ASL alphabet recognition.",
+ anythingElse:
+ "I am a TA for 18.06 (Linear Algebra) and love making math accessible.",
+ github: "https://github.com/priyapatel-math",
+ linkedin: "https://linkedin.com/in/priya-patel-mit",
+ personalSite: "https://priyapatel.dev",
+ transportationType: "Train",
+ comingFrom: "Cambridge, MA",
+ shirtSize: "XS",
+ hasAllergies: true,
+ allergiesDescription: "Tree nuts",
+ needsTravelReimbursement: false,
+ mlhCodeOfConduct: true,
+ mlhPrivacyPolicy: true,
+ mlhEmails: true,
+ status: "reviewed",
+ },
+ {
+ id: "4",
+ user_id: "user_4",
+ name: "Jordan Smith",
+ university: "University of Illinois at Urbana-Champaign",
+ major: "Business",
+ degree: "Bachelor's",
+ graduationYear: 2027,
+ age: 20,
+ gender: "Other",
+ ethnicity: "White",
+ country: "United States",
+ previousHackathons: 0,
+ whyAttend:
+ "I want to attend to learn about technology and meet developers.",
+ technicalChallenge:
+ "I had to fix a bug in a spreadsheet formula at my internship.",
+ proudProject:
+ "I built a simple budget tracker in Excel with some VBA macros. It helped my student org manage expenses.",
+ transportationType: "Driving",
+ comingFrom: "Champaign, IL",
+ shirtSize: "M",
+ hasAllergies: false,
+ needsTravelReimbursement: false,
+ mlhCodeOfConduct: true,
+ mlhPrivacyPolicy: true,
+ mlhEmails: true,
+ status: "flagged",
+ },
+ {
+ id: "5",
+ user_id: "user_5",
+ name: "Wei Zhang",
+ university: "Carnegie Mellon University",
+ major: "Computer Science",
+ degree: "Master's",
+ graduationYear: 2026,
+ age: 24,
+ gender: "Male",
+ ethnicity: "Asian",
+ country: "United States",
+ previousHackathons: 8,
+ whyAttend:
+ "I have been a hackathon organizer at CMU for two years and I want to participate as a hacker this time. I am passionate about building developer tools and I see MHacks as the perfect venue to ship a CLI toolkit I have been designing.",
+ technicalChallenge:
+ "I rewrote a critical path in a distributed key-value store from a single-threaded model to an async Tokio-based architecture in Rust. The migration required careful management of lifetimes and a redesign of the error-propagation model. Throughput improved 4x.",
+ proudProject:
+ "MeshDB — an open-source mesh networking library for IoT devices that auto-discovers peers via mDNS and routes packets over BLE or WiFi. Used by 3 research labs and 200+ GitHub stars.",
+ github: "https://github.com/wzhang-cmu",
+ linkedin: "https://linkedin.com/in/wei-zhang-cmu",
+ personalSite: "https://weizhang.io",
+ transportationType: "Driving",
+ comingFrom: "Pittsburgh, PA",
+ shirtSize: "M",
+ hasAllergies: false,
+ needsTravelReimbursement: false,
+ mlhCodeOfConduct: true,
+ mlhPrivacyPolicy: true,
+ mlhEmails: true,
+ status: "pending",
+ },
+ ];
+ return mock_applicants;
+};
diff --git a/app/applications/review/hacker/raiting-criteria.ts b/app/applications/review/hacker/raiting-criteria.ts
new file mode 100644
index 0000000..1ddec37
--- /dev/null
+++ b/app/applications/review/hacker/raiting-criteria.ts
@@ -0,0 +1,71 @@
+export interface ReviewFormData {
+ motivation: number | undefined;
+ builderMindset: number | undefined;
+ collaboration: number | undefined;
+ creativity: number | undefined;
+ diversity: number | undefined;
+ flagForReview: boolean;
+ reviewComments: string;
+}
+
+export const rating_criteria: {
+ key: keyof Omit;
+ label: string;
+ descriptions: Record;
+}[] = [
+ {
+ key: "motivation",
+ label: "Motivation / Interest",
+ descriptions: {
+ 1: "Generic answer, unclear why they want to attend",
+ 2: "Some interest but mostly vague",
+ 3: "Clear interest in attending and learning",
+ 4: "Strong enthusiasm with specific reasons",
+ 5: "Exceptional passion and strong alignment with the hackathon",
+ },
+ },
+ {
+ key: "builderMindset",
+ label: "Builder Mindset / Initiative",
+ descriptions: {
+ 1: "No evidence of building projects",
+ 2: "Limited coursework examples only",
+ 3: "Some personal or academic projects",
+ 4: "Multiple projects or hackathon experience",
+ 5: "Strong portfolio, startups, open source, or significant projects",
+ },
+ },
+ {
+ key: "collaboration",
+ label: "Collaboration / Community",
+ descriptions: {
+ 1: "No evidence of teamwork or collaboration",
+ 2: "Minimal teamwork experience",
+ 3: "Some collaborative experiences",
+ 4: "Strong teamwork or leadership examples",
+ 5: "Exceptional collaborator, mentor, or community contributor",
+ },
+ },
+ {
+ key: "creativity",
+ label: "Creativity / Curiosity",
+ descriptions: {
+ 1: "Conventional answers, little creativity",
+ 2: "Slight originality",
+ 3: "Moderately interesting ideas",
+ 4: "Creative thinker with interesting perspectives",
+ 5: "Highly original and innovative ideas",
+ },
+ },
+ {
+ key: "diversity",
+ label: "Diversity of Perspective / Background",
+ descriptions: {
+ 1: "Very common background relative to applicant pool",
+ 2: "Slightly different perspective",
+ 3: "Moderately unique experiences or background",
+ 4: "Strongly adds interdisciplinary perspective",
+ 5: "Highly unique background that broadens the participant pool",
+ },
+ },
+];
diff --git a/app/applications/review/hacker/review-dashboard-skeleton.tsx b/app/applications/review/hacker/review-dashboard-skeleton.tsx
new file mode 100644
index 0000000..291070e
--- /dev/null
+++ b/app/applications/review/hacker/review-dashboard-skeleton.tsx
@@ -0,0 +1,138 @@
+import { Skeleton } from "@/components/ui/skeleton";
+import { Card, CardContent, CardHeader } from "@/components/ui/card";
+import { Separator } from "@/components/ui/separator";
+
+function InfoRowSkeleton() {
+ return (
+