Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
99 commits
Select commit Hold shift + click to select a range
19389da
different timezone application deadline handling ,documentation (#853)
abhishek2021005 Jan 15, 2026
71c5dae
getting_started.md updated (#854)
abhishek2021005 Jan 16, 2026
e0f74a9
Not covered sections
abchugh Jan 16, 2026
89c42c4
Red background for skipped sections
abchugh Jan 16, 2026
09c708e
Make slide view red for slides view when section is skipped
abchugh Jan 16, 2026
3ed0e83
Abhishek dev origin (#855)
abhishek2021005 Jan 18, 2026
240a7ae
Announcements list updated (#856)
abhishek2021005 Jan 19, 2026
872b754
added 15.2, 15.3 of ai-1 as not covered
abhishek2021005 Jan 20, 2026
8e424f4
switch https to http for not covered sections
abchugh Jan 20, 2026
ca06fda
...
abchugh Jan 20, 2026
16dbdb8
frontend_guidelines 1.2 updated: define dedicated style objects per c…
abhishek2021005 Jan 21, 2026
c07df8b
marked ai-1's 17.1.1/3/4 and 18.1/2/3 as not covered
abhishek2021005 Jan 21, 2026
8aeb448
add chapters 14/15/16 of lbs as not covered
abhishek2021005 Jan 29, 2026
f7679c2
Add 'Partial Order Planning' to Not Covered sections
abchugh Jan 31, 2026
62f7ef6
edit event in traffic light (#867)
XI4507 Feb 2, 2026
b90b9c6
Search doc fix (#866)
Anshuman-Tiwari-2002 Feb 2, 2026
7ecc68e
Partially ordered planning is now covered
abchugh Feb 3, 2026
0e837db
Theme setup (#863)
khushbu-25 Feb 4, 2026
c06ab1a
Mark Chap 13 as not covered
abchugh Feb 4, 2026
f778e26
Remove CssBaseline from ThemeProvider
abchugh Feb 4, 2026
c510f0f
Added a UI for adding skipped section
Anshuman-Tiwari-2002 Feb 5, 2026
1029ea2
build error fix
Anshuman-Tiwari-2002 Feb 5, 2026
1c9d530
Merge remote-tracking branch 'origin/main' into ui-to-add-skipped-sec…
Anshuman-Tiwari-2002 Feb 5, 2026
01e6d1c
minor
Anshuman-Tiwari-2002 Feb 6, 2026
4bd6bff
Exam-Problem (#857)
shubh1118 Feb 6, 2026
7040042
frontend guideline updated to follow newer theme (#871)
abhishek2021005 Feb 7, 2026
e3c8433
exam support submit problem (#869)
behroozbc Feb 9, 2026
d317995
Merge remote-tracking branch 'origin/main' into ui-to-add-skipped-sec…
Anshuman-Tiwari-2002 Feb 9, 2026
dfdb3e6
minor fix
Anshuman-Tiwari-2002 Feb 9, 2026
b93f8a0
Fixed the code and also the currentsem.json file
Anshuman-Tiwari-2002 Feb 10, 2026
385b426
unique url for courses (#874)
XI4507 Feb 13, 2026
3db7d5c
Merge remote-tracking branch 'origin/main' into ui-to-add-skipped-sec…
Anshuman-Tiwari-2002 Feb 13, 2026
0bf91a1
UI to add skipped sections (#872)
Anshuman-Tiwari-2002 Feb 13, 2026
8136c01
added spec function for get-coverage-timeline
Anshuman-Tiwari-2002 Feb 14, 2026
9aa8f10
minor
Anshuman-Tiwari-2002 Feb 14, 2026
92a94b8
Merge remote-tracking branch 'origin/main' into ui-to-add-skipped-sec…
abchugh Feb 16, 2026
d77256d
simplify
abchugh Feb 16, 2026
7c55b61
Fix issue with course-notes not-covered-sections
abchugh Feb 16, 2026
a87d44c
ftml reset on doc and fragment, theme fixes (#876)
abhishek2021005 Feb 16, 2026
542c0a1
dark theme fix on competencyTable
abhishek2021005 Feb 17, 2026
92d8c09
Update system-updates.ts (#879)
XI4507 Feb 17, 2026
447cda0
generate lecture entry fix
XI4507 Feb 18, 2026
bbdca39
useEffect and dependent states being replaced with useQuery for cachi…
abhishek2021005 Feb 18, 2026
bf5e1a8
Lecture Video-Slide Analytics Dashboard (#878)
gowthamkrishna555 Feb 18, 2026
2e584ff
logged out user can also practice problems bug fix.
abhishek2021005 Feb 19, 2026
4f491ec
resource-action acl setup fix (#883)
XI4507 Feb 19, 2026
69c6d67
Merge pull request #880 from KWARC/generateLectureEntry
XI4507 Feb 19, 2026
0289c31
SubProblems Not allowed in Quiz (#882)
khushbu-25 Feb 20, 2026
7b2ac4c
forum-issue-resolved (#884)
shubh1118 Feb 20, 2026
f87c174
added livestream url in courseMetadata (#886)
XI4507 Feb 27, 2026
e5ef179
courseResource (#885)
khushbu-25 Feb 28, 2026
ce186a0
Update practice-problems.tsx
XI4507 Mar 5, 2026
c2f121b
Shared tmux documentation
abchugh Mar 5, 2026
8e82452
Course resources (#888)
khushbu-25 Mar 5, 2026
f194839
student dashboard
XI4507 Mar 9, 2026
24dfce5
updated code to use tanstackquery and useCurrentUser
XI4507 Mar 11, 2026
e211853
Course/semesterwises (#893)
khushbu-25 Mar 12, 2026
7735556
prisma packages
XI4507 Mar 12, 2026
fa3aac3
schema acc to prod
abhishek2021005 Mar 12, 2026
60769c8
Update migration.sql
XI4507 Mar 12, 2026
c9176f9
Merge pull request #891 from KWARC/studentDashboard
XI4507 Mar 16, 2026
98e8f70
Cheatsheetcreator (#890)
abhishek2021005 Mar 16, 2026
7c7c040
Update package.json
XI4507 Mar 16, 2026
ca40bf4
Update datasource URL format in prisma.config.ts
abchugh Mar 16, 2026
5d1dcf4
cheatsheet tables added in db migration
abhishek2021005 Mar 16, 2026
4f55024
added livestreamURL in coursemetadata
XI4507 Mar 16, 2026
094e25e
student dashboard fix
XI4507 Mar 16, 2026
494919a
Quiz on practiceproblem page (#889)
Anshuman-Tiwari-2002 Mar 16, 2026
48e9f07
db Utils according to prisma (#894)
XI4507 Mar 17, 2026
c70dfb1
Cheatsheetcreator (#895)
abhishek2021005 Mar 17, 2026
51eb14e
updated getting_started
XI4507 Mar 18, 2026
ae66e0f
homework is now already coming as object bcz of prisma migration, no …
abhishek2021005 Mar 19, 2026
33904e0
serialize big int and auto parse json at global level to deal with pr…
abhishek2021005 Mar 19, 2026
5699def
get-homeworkfix
XI4507 Mar 20, 2026
6650e11
Update prisma-comments.ts
XI4507 Mar 20, 2026
5504df6
Allow instructors to set the 'Availability Window' for course resourc…
khushbu-25 Mar 20, 2026
655126b
scanned cheatsheet crop and rotate feature like document scanner, bug…
abhishek2021005 Mar 20, 2026
adac2d3
Update ALeA URL in monitor.py
abchugh Mar 23, 2026
203dd3c
Update migration.sql
abchugh Mar 23, 2026
42eeb74
Update get-acl-userdetails.ts
XI4507 Mar 23, 2026
1505105
Update index.tsx
khushbu-25 Mar 25, 2026
8da7a82
minor-fix
khushbu-25 Mar 26, 2026
4f1a8d1
Enrollment-API
khushbu-25 Mar 26, 2026
919caa2
Delete packages/alea-frontend/pages/api/course/enroll-unenroll.ts
khushbu-25 Mar 26, 2026
15597e1
prisma migration json parsing fix and lo-explorer bug fix
abhishek2021005 Mar 30, 2026
8463000
Update university-terms.ts
XI4507 Apr 7, 2026
9840ed8
dark theme properly applied on jp related pages (#904)
abhishek2021005 Apr 8, 2026
9a23c51
Update courseInfo.ts
XI4507 Apr 8, 2026
4d6e62d
minor bug ( header bgColor to default css)
abhishek2021005 Apr 8, 2026
bf17d68
fix
XI4507 Apr 8, 2026
44aae1a
Update [quizId].tsx
XI4507 Apr 10, 2026
4ce8142
Update numInputsResponded to check responses safely
abchugh Apr 10, 2026
fecfa77
Parse response JSON for grading db query
abchugh Apr 10, 2026
3a6b709
Create README.md
abchugh Apr 10, 2026
c343834
Add files via upload
abchugh Apr 10, 2026
f2d4921
Merge pull request #899 from KWARC/enroll-unenroll-fix
XI4507 Apr 13, 2026
afedf55
fix-sem-creation-form-and-instructor-name-issue
khushbu-25 Apr 13, 2026
951a91e
Merge pull request #908 from KWARC/fixed-instructor-name
XI4507 Apr 13, 2026
82b0eaa
generate lecture entry tooltip added
XI4507 Apr 13, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
6 changes: 1 addition & 5 deletions .cursor/mcp.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,3 @@
{
"mcpServers": {
"nx-mcp": {
"url": "http://localhost:9355/sse"
}
}
"mcpServers": {}
}
2 changes: 2 additions & 0 deletions backend_and_general_guidelines.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@ const SEC_PER_HOUR = 3600;
const WAIT_DURATION_HRS = 14;
end_timestamp_sec = start_timestamp_sec + WAIT_DURATION_HRS * SEC_PER_HOUR;
```
## 1.4. Document regex expressions
Whenever a regular expression is used in the code, add a one-line comment explaining what the regex does, since regex patterns are often difficult to read and maintain.

# 2. Writing APIs

Expand Down
185 changes: 185 additions & 0 deletions frontend_guidelines.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,191 @@ Prefer `sx` props over inline styles for better maintainability and theming supp
+ <Box sx={{ bgcolor: "primary.main", p: 2 }}></Box>
```

### 1.2 Styling Pattern with sx (Recommended)

To keep components clean, readable, and scalable, follow a **"static styles + local overrides"** pattern.

#### 1.2.1 Centralize Static Styles

Define static styles in a dedicated object **near the bottom of the file**.

```typescript
const loListStyles = {
listItem: {
display: 'flex',
alignItems: 'center',
justifyContent: 'space-between',
p: 1.5,
mb: 1,
borderRadius: 2,
'&:hover': {
boxShadow: '0 4px 8px rgba(0,0,0,0.2)',
}
},
listHeader: {
display: 'flex',
justifyContent: 'space-between',
gap: 1,
mb: 2,
flexWrap: 'wrap',
}
};
```
✅ Keeps JSX clean
✅ Improves readability


#### 1.2.2 Prefer sx Composition Over Style Functions

When a small part of the style **depends on local state**, do not convert the entire style into a function.

❌ Avoid:

```typescript
listItem: (isActive: boolean) => ({
backgroundColor: isActive ? 'green' : 'white',
});
```

✅ Prefer sx composition :

```jsx
<Paper
sx={{
...loListStyles.listItem,
color: isActive ? 'green' : 'white',
}}
/>
```


#### 1.2.3 Use sx Array for Conditional Overrides

MUI allows sx to be an array. Later entries override earlier ones.

```jsx
<Box
sx={[
styles.container,
isSelected && { borderColor: 'primary.main' },
isDisabled && { opacity: 0.5 },
]}
/>
```

This pattern is preferred over:

- multiple ternaries
- deeply nested conditions
- inline style objects

#### 1.2.4 Component-Level Style Ownership

Each component should own its styles.

❌ Avoid mixing **unrelated component styles**:

```typescript
// Two unrelated components in the same file, but all styles in one object
const styles = {
navbar: { display: 'flex', p: 2},
navbarItem: { color: 'white', ml: 2 },
sidebar: { width: 250, bgcolor: '#f5f5f5', p: 2 },
sidebarItem: { mb: 1, cursor: 'pointer' },
};
```
- Hard to tell which styles belong to which component
- Difficult to maintain as the file grows
- Risk of accidental overrides

✅ Recommended:

```typescript
// Component 1: Navbar
const navbarStyles = {
root: { display: 'flex', p: 2 },
item: { color: 'white', ml: 2, cursor: 'pointer' },
};

// Component 2: Sidebar
const sidebarStyles = {
root: { width: 250, bgcolor: '#f5f5f5', p: 2 },
item: { mb: 1, cursor: 'pointer' },
};
```

Benefits:
- Better encapsulation
- Easier refactoring
- Fewer merge conflicts
- Clear ownership

#### 1.2.5 Inline sx is fine for very simple, one-off styles

For tiny, one-line, self-contained style adjustments, it’s okay to write sx inline.\
**Examples:**
```jsx
<Box sx={{ p: 1, bgcolor: 'primary.light' }}>Hello</Box>

<Button sx={{ ml: 2 }}>Click me</Button>
```
#### Notes:

- Use inline sx only for trivial, non-reusable styles.

- For complex or reusable styles, always define a dedicated style object.

### 1.3 Color Palette Usage

#### 1.3.1 Always Use Theme Palette Tokens
**Examples:**
```jsx
<Box sx={{ color: 'text.primary', bgcolor: 'background.paper' }} />
```
#### 1.3.2 Use Gradients Defined in the Theme Palette

- Always use gradients defined under palette.gradients.

- Do not define gradient values directly inside components.

- If a required gradient is not available,**add a new gradient to the theme palette with a clear, semantic key.**

## NOTE:
- Ensures light/dark mode compatibility for color being used

### 1.4 Typography

#### 1.4.1 Use Theme Typography Variants Only

#### 1.4.2 Font Sizes Should Come From Theme.
- Prefer MUI typography variants (T1,h1–h6, body1, body2, etc.) instead of defining custom font sizes.

- If a local override is required for typography-related properties (fontSize, lineHeight, fontWeight, etc.), ensure it is responsive across all breakpoints.
- Always verify typography on small, medium, and large screens. ❌ Avoid **single-screen overrides**

#### 1.5 Use Shadows From the Central shadows.ts Array
- Always use shadow values defined in shadows.ts.
- Do not define custom boxShadow values inside components.
- If the required shadow intensity or opacity is not available, add a new entry to the shadows.ts array instead of creating ad-hoc shadows.

❌ Avoid:
```tsx
sx={{ boxShadow: '0 4px 8px rgba(0,0,0,0.2)' }}
```
✅ Prefer:
```tsx
sx={{ boxShadow: theme.shadows[2] }}
```


#### 1.6 Override Common Components in components.ts
- Commonly used components across the project must have their some of the styles overridden centrally.

## NOTE:
- Overrides for Button, TextField, and other frequently used components are already defined.
e.g button, textfield and others are already done.


## 2. State Management

### 2.1 Derived State Optimization
Expand Down
113 changes: 101 additions & 12 deletions getting_started.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,13 +26,38 @@ Ensure you have the following installed on your system before proceeding:

## Database Setup

1. **Check for SQL Setup Files**
- Navigate to the project folder and locate the `comments_database_setup` directory.
- Inside, you will find SQL scripts for setting up the database.
The project uses **Prisma** for database migrations. Ensure MySQL is running and the database exists before running migrations.

2. **Run SQL Scripts**
- Open MySQL Workbench.
- Execute the SQL queries from the `comments_database_setup` folder to create the necessary database and tables.
1. **Create the database** (if it does not exist)
- Open MySQL Workbench or use the MySQL CLI.
- Create the database: `CREATE DATABASE comments_test;` (or your chosen database name).

2. **Configure environment variables**
- Create `packages/alea-frontend/.env.local` with the following database connection variables (update as required):

```
MYSQL_HOST=127.0.0.1
MYSQL_PORT=3306
MYSQL_USER=root
MYSQL_PASSWORD=password
MYSQL_COMMENTS_DATABASE=comments_test
```

3. **Run Prisma migrations**
- Deploy migrations to create/update tables:
```sh
npm run prisma:migrate-deploy
```
- For development with migration creation, use:
```sh
npm run prisma:migrate-dev
```

4. **Generate Prisma client**
- The client is generated automatically by the prebuild step. To generate manually:
```sh
npm run prisma:generate
```

## Running the Applications

Expand All @@ -55,19 +80,32 @@ This guide provides step-by-step instructions to create and configure an Access

Execute the SQL queries from the `intialSqlSetup.sql` file to set up the sys-admin ACL, initial course metadata, and other required data.

### Step 2: Insert into `ResourceAccess`

Run the following SQL query to add resource access control:

```INSERT INTO ResourceAccess (resourceId, actionId, aclId) VALUES ('/**', 'ACCESS_CONTROL', 'sys-admin');```

### Step 3: Assign Resource-Action Permissions
### Step 2: Assign Resource-Action Permissions

1. Navigate to the **exp** page in the application.
2. Locate and click on the **system-administrator** button.
3. Follow the prompts to create a resource-action assignment by specifying the desired resources and actions that the `sys-admin` role should control.
4. Save the changes.

### Step 3: University Admin Setup

Set up the university admin to access the university and create semesters:

1. **Create the university admin ACL** on the ACL page (`/acl`): Click "Create new ACL" and create the ACL (e.g., `fau-admin` for FAU). Set the updater ACL to `sys-admin` and add the desired user(s) as members.
2. **Assign resource-action**: Navigate to the **exp** page and click the **system-administrator** button to open the sys-admin panel. Assign the resource-action: resource `/university/{universityId}/university-sem-info` with action `MUTATE` to the `{universityId}-admin` ACL (replace `{universityId}` with your university ID, e.g., `FAU`).
3. The university admin can then navigate to `/u/{universityId}/university-admin` to access the dashboard and create semesters.

### Step 4: Create Semester and Add Course to Semester

Prerequisites: Complete Step 3 to set up the `{universityId}-admin` ACL and resource-action. Admins should see the "go to university admin page" link at `/u/{universityId}`.

1. **Select semester**: Go to the University Admin page (`/u/{universityId}/university-admin`) and select the semester to which you want to add a course. Create a new semester if needed.
2. **Add course**: In the Course Management section, select a course from the dropdown menu or manually enter the Course ID. Click the **Add Course to Semester** button.
3. **Create Instructor ACL**: After adding the course, click the **Create Instructor ACL** button next to the Course ID. The ACL is created immediately—you can navigate directly to the ACL page (`/acl/{courseId}-{instanceId}-instructors`) to edit it and add instructor members. Then request the Sys-Admin to approve the course.
4. **Sys-Admin approval**: The Sys-Admin approves the course by performing a **Quick Course Access Setup** from the sys-admin panel. After approval, instructors added to that course's ACL can access the Instructor Dashboard.
5. **Instructor setup**: The instructor can now access the **Access Control** tab in the Instructor Dashboard. Click the **Default Resource-Action Setup** button to create the resource-action assignments for the course. Once complete, all tabs in the Instructor Dashboard become available.

## Fake User Login

1. *Login Flow*
Expand All @@ -92,6 +130,57 @@ VALUES (
1
);
```
- Run the following SQL query to add corresponding resource access control:
(**NOTE**: replace semester name in `resourceId` with the current `semesterId` **or** prefer **UI** instead of using this sql query to add resourceAccess control)

```sql
INSERT INTO ResourceAccess (resourceId, actionId, aclId)
VALUES ('/instance/WS25-26/job-portal', 'APPLY', 'job-portal-students');
```

## Job Portal ACL for ADMINS

- A closed ACL `job-portal-admins` for admins of Job Portal.
- System Administrator will decide whom to make admin.

#### Database Entry

```sql
INSERT INTO AccessControlList (id, description, updaterACLId, isOpen)
VALUES (
'job-portal-admins',
'Admins of job portal',
'sys-admin',
0
);
```

- Run the following SQL query to add corresponding resource access control:(**NOTE**: replace semester name in `resourceId` with the current `semesterId` **or** prefer **UI** instead of using this sql query to add resourceAccess control)

```sql
INSERT INTO ResourceAccess (resourceId, actionId, aclId)
VALUES ('/instance/WS25-26/job-portal', 'MANAGE_JOB_TYPES', 'job-portal-admins');
```

- After ACL is being created ,add members into `job-portal-admins` **manually using UI**.

## Job Portal ACL for ADMINS

- A closed ACL `job-portal-admins` for admins of Job Portal.
- System Administrator will decide whom to make admin.

#### Database Entry

```sql
INSERT INTO AccessControlList (id, description, updaterACLId, isOpen)
VALUES (
'job-portal-admins',
'Admins of job portal',
'sys-admin',
0
);
```
- After ACL is being created ,add members into `job-portal-admins` manually using UI.

## env.local

Expand Down
6 changes: 6 additions & 0 deletions intialSqlSetup.sql → initialSqlSetup.sql
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,12 @@ INSERT INTO
VALUES
('sys-admin', NULL, 'fake_joy');

-- Insert into `ResourceAccess`
INSERT INTO
ResourceAccess (resourceId, actionId, aclId)
VALUES
('/**', 'ACCESS_CONTROL', 'sys-admin');

-- Insert course metadata
INSERT INTO
courseMetadata (
Expand Down
Binary file added job_portal/Admin Job Portal.mp4
Binary file not shown.
1 change: 1 addition & 0 deletions job_portal/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
# Documentation for Job Portal in ALeA
Binary file added job_portal/Recruiter Job Portal.mp4
Binary file not shown.
Binary file added job_portal/Student Job Portal.mp4
Binary file not shown.
Loading
Loading