# pradipmishra1/secm architecture

> Architecture diagram of the GitHub repository pradipmishra1/secm, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-28). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/pradipmishra1/secm
- Repository: https://github.com/pradipmishra1/secm

## Overview

SECM is a student engagement and challenge-management application. Organizers create challenges, review submissions, and announce winners; students discover and join challenges, submit work, and track results. The tree also shows profiles, teams, social features, messaging, announcements, analytics, and subscriptions. Sampled routes confirm database-backed profile, challenge, friendship, and winner operations, plus winner notifications and email. Most other route and page internals were not sampled, so their links are limited to capabilities indicated by the tree.

Main entry points: [`src/lib/prisma.ts`](https://github.com/pradipmishra1/secm/blob/main/src/lib/prisma.ts) (Application database), [`src/app/api/submissions/[id]/winner/route.ts`](https://github.com/pradipmishra1/secm/blob/main/src/app/api/submissions/%5Bid%5D/winner/route.ts) (Winner announcements), [`src/app/api/challenges`](https://github.com/pradipmishra1/secm/tree/main/src/app/api/challenges) (Challenge management), [`src/components/SubmitWorkForm.tsx`](https://github.com/pradipmishra1/secm/blob/main/src/components/SubmitWorkForm.tsx) (Submission interface)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_challenge["Challenge lifecycle"]
  node_dashboard["Dashboard experience"]
  node_challenge_ui["Challenge interface"]
  node_challenge_api["Challenge management"]
  node_submission_ui["Submission interface<br/>[SubmitWorkForm.tsx]"]
  node_submission_api["Submission handling"]
  node_upload_api["File uploads<br/>[route.ts]"]
  node_review_api["Review and AI scoring<br/>[route.ts]"]
  node_ai_review["AI review logic<br/>[aiReview.ts]"]
  node_winner_ui["Winner management<br/>[WinnersManager.tsx]"]
  node_winner_api["Winner announcements<br/>[route.ts]"]
end

subgraph group_community["Community"]
  node_profile_api["Profiles and activity"]
  node_social_api["Following and friends<br/>[route.ts]"]
  node_community_ui["Community features<br/>[FriendsManager.tsx]"]
  node_announcements_api["Announcements<br/>[route.ts]"]
  node_messaging["Messaging and alerts"]
end

subgraph group_platform["Platform services"]
  node_cloudinary["Cloudinary"]
  node_auth["Authentication<br/>[auth.ts]"]
  node_database[("Application database<br/>[prisma.ts]")]
  node_notifications["Notification service<br/>[notifications.ts]"]
  node_mailer["Email service<br/>[mailer.ts]"]
  node_subscriptions["Subscriptions"]
  node_khalti["Khalti payments"]
end

subgraph group_operations["Administration"]
  node_admin["Administration"]
  node_analytics["Analytics and rankings<br/>[route.ts]"]
end

node_student(("Student"))
node_organizer(("Organizer"))

node_student -->|"uses"| node_dashboard
node_organizer -->|"uses"| node_dashboard
node_dashboard -->|"opens"| node_challenge_ui
node_challenge_ui -->|"requests"| node_challenge_api
node_organizer -->|"creates"| node_challenge_api
node_challenge_api -->|"checks session"| node_auth
node_challenge_api -->|"creates challenge"| node_database
node_student -->|"submits work"| node_submission_ui
node_submission_ui -->|"sends submission"| node_submission_api
node_submission_ui -->|"uploads files"| node_upload_api
node_upload_api -->|"uploads media"| node_cloudinary
node_organizer -->|"reviews work"| node_review_api
node_review_api -->|"invokes"| node_ai_review
node_organizer -->|"selects winners"| node_winner_ui
node_winner_ui -->|"sets position"| node_winner_api
node_winner_api -->|"updates winner"| node_database
node_winner_api -->|"notifies recipients"| node_notifications
node_winner_api -->|"sends email"| node_mailer
node_student -->|"updates profile"| node_profile_api
node_profile_api -->|"checks session"| node_auth
node_profile_api -->|"saves profile"| node_database
node_student -->|"connects"| node_community_ui
node_community_ui -->|"requests friends"| node_social_api
node_social_api -->|"reads and writes"| node_database
node_social_api -->|"creates alert"| node_notifications
node_organizer -->|"posts updates"| node_announcements_api
node_announcements_api -->|"reads and writes"| node_database
node_student -->|"messages"| node_messaging
node_student -->|"subscribes"| node_subscriptions
node_subscriptions -.->|"initiates payment"| node_khalti
node_organizer -->|"administers"| node_admin
node_student -->|"views rankings"| node_analytics

click node_dashboard "https://github.com/pradipmishra1/secm/tree/main/src/app/dashboard"
click node_challenge_ui "https://github.com/pradipmishra1/secm/blob/main/src/components/ChallengeDetail.tsx"
click node_challenge_api "https://github.com/pradipmishra1/secm/tree/main/src/app/api/challenges"
click node_submission_ui "https://github.com/pradipmishra1/secm/blob/main/src/components/SubmitWorkForm.tsx"
click node_submission_api "https://github.com/pradipmishra1/secm/tree/main/src/app/api/challenges/%5Bid%5D/submissions"
click node_upload_api "https://github.com/pradipmishra1/secm/blob/main/src/app/api/upload/route.ts"
click node_review_api "https://github.com/pradipmishra1/secm/blob/main/src/app/api/submissions/%5Bid%5D/ai-review/route.ts"
click node_ai_review "https://github.com/pradipmishra1/secm/blob/main/src/lib/aiReview.ts"
click node_winner_ui "https://github.com/pradipmishra1/secm/blob/main/src/components/WinnersManager.tsx"
click node_winner_api "https://github.com/pradipmishra1/secm/blob/main/src/app/api/submissions/%5Bid%5D/winner/route.ts"
click node_profile_api "https://github.com/pradipmishra1/secm/tree/main/src/app/api/profile"
click node_social_api "https://github.com/pradipmishra1/secm/blob/main/src/app/api/friends/route.ts"
click node_community_ui "https://github.com/pradipmishra1/secm/blob/main/src/components/FriendsManager.tsx"
click node_announcements_api "https://github.com/pradipmishra1/secm/blob/main/src/app/api/announcements/route.ts"
click node_messaging "https://github.com/pradipmishra1/secm/tree/main/src/app/api/messages"
click node_auth "https://github.com/pradipmishra1/secm/blob/main/src/lib/auth.ts"
click node_database "https://github.com/pradipmishra1/secm/blob/main/src/lib/prisma.ts"
click node_notifications "https://github.com/pradipmishra1/secm/blob/main/src/lib/notifications.ts"
click node_mailer "https://github.com/pradipmishra1/secm/blob/main/src/lib/mailer.ts"
click node_subscriptions "https://github.com/pradipmishra1/secm/tree/main/src/app/api/subscription"
click node_admin "https://github.com/pradipmishra1/secm/tree/main/src/app/api/admin"
click node_analytics "https://github.com/pradipmishra1/secm/blob/main/src/app/api/leaderboard/route.ts"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_dashboard,node_challenge_ui,node_challenge_api,node_submission_ui,node_submission_api,node_upload_api,node_review_api,node_ai_review,node_winner_ui,node_winner_api toneBlue
class node_profile_api,node_social_api,node_community_ui,node_announcements_api,node_messaging toneAmber
class node_cloudinary,node_auth,node_database,node_notifications,node_mailer,node_subscriptions,node_khalti toneMint
class node_admin,node_analytics toneRose
class node_student,node_organizer toneIndigo
```

## Components

### Challenge lifecycle

- [Dashboard experience](https://github.com/pradipmishra1/secm/tree/main/src/app/dashboard): `src/app/dashboard`
- [Challenge interface](https://github.com/pradipmishra1/secm/blob/main/src/components/ChallengeDetail.tsx): `src/components/ChallengeDetail.tsx`
- [Challenge management](https://github.com/pradipmishra1/secm/tree/main/src/app/api/challenges): `src/app/api/challenges`
- [Submission interface](https://github.com/pradipmishra1/secm/blob/main/src/components/SubmitWorkForm.tsx): `src/components/SubmitWorkForm.tsx`
- [Submission handling](https://github.com/pradipmishra1/secm/tree/main/src/app/api/challenges/%5Bid%5D/submissions): `src/app/api/challenges/[id]/submissions`
- [File uploads](https://github.com/pradipmishra1/secm/blob/main/src/app/api/upload/route.ts): `src/app/api/upload/route.ts`
- [Review and AI scoring](https://github.com/pradipmishra1/secm/blob/main/src/app/api/submissions/%5Bid%5D/ai-review/route.ts): `src/app/api/submissions/[id]/ai-review/route.ts`
- [AI review logic](https://github.com/pradipmishra1/secm/blob/main/src/lib/aiReview.ts): `src/lib/aiReview.ts`
- [Winner management](https://github.com/pradipmishra1/secm/blob/main/src/components/WinnersManager.tsx): `src/components/WinnersManager.tsx`
- [Winner announcements](https://github.com/pradipmishra1/secm/blob/main/src/app/api/submissions/%5Bid%5D/winner/route.ts): `src/app/api/submissions/[id]/winner/route.ts`

### Community

- [Profiles and activity](https://github.com/pradipmishra1/secm/tree/main/src/app/api/profile): `src/app/api/profile`
- [Following and friends](https://github.com/pradipmishra1/secm/blob/main/src/app/api/friends/route.ts): `src/app/api/friends/route.ts`
- [Community features](https://github.com/pradipmishra1/secm/blob/main/src/components/FriendsManager.tsx): `src/components/FriendsManager.tsx`
- [Announcements](https://github.com/pradipmishra1/secm/blob/main/src/app/api/announcements/route.ts): `src/app/api/announcements/route.ts`
- [Messaging and alerts](https://github.com/pradipmishra1/secm/tree/main/src/app/api/messages): `src/app/api/messages`

### Platform services

- **Cloudinary**
- [Authentication](https://github.com/pradipmishra1/secm/blob/main/src/lib/auth.ts): `src/lib/auth.ts`
- [Application database](https://github.com/pradipmishra1/secm/blob/main/src/lib/prisma.ts): `src/lib/prisma.ts`
- [Notification service](https://github.com/pradipmishra1/secm/blob/main/src/lib/notifications.ts): `src/lib/notifications.ts`
- [Email service](https://github.com/pradipmishra1/secm/blob/main/src/lib/mailer.ts): `src/lib/mailer.ts`
- [Subscriptions](https://github.com/pradipmishra1/secm/tree/main/src/app/api/subscription): `src/app/api/subscription`
- **Khalti payments**

### Administration

- [Administration](https://github.com/pradipmishra1/secm/tree/main/src/app/api/admin): `src/app/api/admin`
- [Analytics and rankings](https://github.com/pradipmishra1/secm/blob/main/src/app/api/leaderboard/route.ts): `src/app/api/leaderboard/route.ts`

### Other components

- **Student**
- **Organizer**

## Connections

- Student → Dashboard experience: uses
- Organizer → Dashboard experience: uses
- Dashboard experience → Challenge interface: opens
- Challenge interface → Challenge management: requests
- Organizer → Challenge management: creates
- Challenge management → Authentication: checks session
- Challenge management → Application database: creates challenge
- Student → Submission interface: submits work
- Submission interface → Submission handling: sends submission
- Submission interface → File uploads: uploads files
- File uploads → Cloudinary: uploads media
- Organizer → Review and AI scoring: reviews work
- Review and AI scoring → AI review logic: invokes
- Organizer → Winner management: selects winners
- Winner management → Winner announcements: sets position
- Winner announcements → Application database: updates winner
- Winner announcements → Notification service: notifies recipients
- Winner announcements → Email service: sends email
- Student → Profiles and activity: updates profile
- Profiles and activity → Authentication: checks session
- Profiles and activity → Application database: saves profile
- Student → Community features: connects
- Community features → Following and friends: requests friends
- Following and friends → Application database: reads and writes
- Following and friends → Notification service: creates alert
- Organizer → Announcements: posts updates
- Announcements → Application database: reads and writes
- Student → Messaging and alerts: messages
- Student → Subscriptions: subscribes
- Subscriptions → Khalti payments: initiates payment
- Organizer → Administration: administers
- Student → Analytics and rankings: views rankings
