Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
103 commits
Select commit Hold shift + click to select a range
be6839c
Create README.md (#5) (#6)
wangstagangstaa Jan 22, 2025
0352109
shared/edwn/clean up (#7)
wangstagangstaa Jan 22, 2025
35ab425
ci: add Azure Static Web Apps workflow file
monash-coding Jan 22, 2025
37dbc1d
frontend/edwin/add mock data (#10)
wangstagangstaa Jan 23, 2025
f35ced3
use npm clean install instead (#11)
wangstagangstaa Jan 25, 2025
2ba67cf
Job Details Component (#12)
oliverhuangcode Jan 25, 2025
60af494
Frontend/oliver/job details component (#13)
oliverhuangcode Jan 25, 2025
e46190b
make the search bar / filters update the URL, simplify hooks and prov…
jason301c Jan 25, 2025
7e9bbb8
Add basic api endpoint to get all jobs (#15)
je-zhou Jan 25, 2025
7d5b217
Adding Search Params and Querying to the backend endpoint (#17)
je-zhou Jan 25, 2025
bd17c60
Implemented theme system (#16)
kyranaus Jan 25, 2025
6815b12
Added hot-reload for backend (#18)
kyranaus Jan 26, 2025
7959466
prevent duplicate lint runs in prs, disable azure preview for prs (#22)
wangstagangstaa Jan 26, 2025
9335a1b
improve overall typing, add industry fields, migrate to server action…
jason301c Jan 26, 2025
f59a355
Modified the navbar, search and theme (#20)
kyranaus Jan 26, 2025
23461be
Bump next from 15.1.5 to 15.1.6 in /frontend in the nextjs group (#24)
dependabot[bot] Jan 28, 2025
d73c157
Bump eslint from 9.18.0 to 9.19.0 in /frontend (#25)
dependabot[bot] Jan 28, 2025
2308743
Bump @types/node from 20.17.14 to 22.12.0 in /frontend (#28)
dependabot[bot] Jan 28, 2025
a28c4bf
frontend overhaul (#23)
wangstagangstaa Jan 28, 2025
f0bc395
Quick fix of react hydration errors, filtering errors (#29)
jason301c Jan 29, 2025
c993814
Added loader component (#30)
je-zhou Jan 29, 2025
6aace37
Fix card html tag rendering (#34)
oliverhuangcode Jan 30, 2025
b9619f5
Fix pagination styling (#33)
oliverhuangcode Jan 30, 2025
087a9e9
Fix html rendering and adjust colours (#32)
oliverhuangcode Jan 30, 2025
cdd3151
Update .gitignore to exclude tsbuildinfo (#35)
jason301c Jan 30, 2025
4cc223f
feat: Integrate job industry into job card and job details (#36)
jason301c Jan 31, 2025
62226f6
Filtering (#37)
AdityaZDesai Jan 31, 2025
50e1e50
add job type filter (#38)
wangstagangstaa Feb 1, 2025
31fc2a2
add clearing filters & no results page (#39)
wangstagangstaa Feb 1, 2025
0040690
Added more industries (#42)
Brian-w-m Feb 8, 2025
681fc4c
Squashed work right types (#43)
Brian-w-m Feb 8, 2025
57d9f63
Update job type name (#44)
Brian-w-m Feb 8, 2025
3f2c506
Bump isomorphic-dompurify from 2.20.0 to 2.21.0 in /frontend (#45)
dependabot[bot] Feb 8, 2025
68a5045
Bump @types/node from 22.12.0 to 22.13.0 in /frontend (#46)
dependabot[bot] Feb 8, 2025
2c6f66f
Bump dompurify from 3.2.3 to 3.2.4 in /frontend (#47)
dependabot[bot] Feb 8, 2025
f0a26d7
Bump actions/checkout from 3 to 4 (#41)
dependabot[bot] Feb 8, 2025
b63eebc
Bump mongodb from 6.12.0 to 6.13.0 in /frontend (#48)
dependabot[bot] Feb 8, 2025
f38c4ff
Fix css of title to logo being too close (#50)
oliverhuangcode Feb 8, 2025
2b408ec
Create unscrollable home page that reroutes to according pages (#49)
oliverhuangcode Feb 8, 2025
4f86005
Frontend/edwin/mobile UI fix (#40)
wangstagangstaa Feb 8, 2025
20a4142
Added one liner description (#54)
Brian-w-m Feb 10, 2025
6ceae03
CompanyLogo renders a placeholder image if url is null (#53)
wangstagangstaa Feb 11, 2025
834808c
Frontend/kyran/quickfixes (#51)
kyranaus Feb 12, 2025
e3689ea
Frontend/edwin/filter search fixes (#62)
wangstagangstaa Feb 12, 2025
d16d9ce
Bump @tabler/icons-react from 3.29.0 to 3.30.0 in /frontend (#58)
dependabot[bot] Feb 17, 2025
c39563f
Bump prettier from 3.4.2 to 3.5.0 in /frontend (#60)
dependabot[bot] Feb 17, 2025
ef9368b
Bump @mantine/core from 7.16.2 to 7.16.3 in /frontend (#57)
dependabot[bot] Feb 17, 2025
b149c1d
Bump eslint from 9.19.0 to 9.20.0 in /frontend (#59)
dependabot[bot] Feb 17, 2025
c58552e
Bump postcss from 8.5.1 to 8.5.2 in /frontend (#55)
dependabot[bot] Feb 17, 2025
4b3072e
Frontend/edwin/test redesign UI (#63)
wangstagangstaa Feb 17, 2025
f0263bb
Bump the nextjs group in /frontend with 2 updates (#64)
dependabot[bot] Feb 17, 2025
2ec427e
Bump @mantine/core from 7.16.3 to 7.17.0 in /frontend (#65)
dependabot[bot] Feb 17, 2025
1286026
Bump eslint-config-next from 15.1.5 to 15.1.7 in /frontend (#69)
dependabot[bot] Feb 17, 2025
448d92f
Bump prettier from 3.5.0 to 3.5.1 in /frontend (#68)
dependabot[bot] Feb 17, 2025
b080cc7
Bump eslint from 9.20.0 to 9.20.1 in /frontend (#66)
dependabot[bot] Feb 17, 2025
f00e54f
changed setSelectedJob to null within useEffect in the filters page (…
AdityaZDesai Feb 18, 2025
0a4f42e
Scrolls to top when new job is selected (#71)
AdityaZDesai Feb 19, 2025
568ac32
Favicon and title (#72)
AdityaZDesai Feb 19, 2025
820094a
Minor UI fixes (4 tickets) (#73)
jason301c Feb 22, 2025
8b64864
Fix: Pagination for current page could be clicked and would retrigger…
oliverhuangcode Feb 22, 2025
6230b57
Fix: Bug where pagination still displayed when loading was commencing…
oliverhuangcode Feb 22, 2025
62e27a1
Fix: No result clear filter not correctly displaying loading (#74)
oliverhuangcode Feb 22, 2025
a333018
fix job list scroll (#77)
wangstagangstaa Feb 22, 2025
b63b7ec
Frontend/edwin/homepage (#79)
wangstagangstaa Feb 23, 2025
c5c7d92
Frontend/edwin/fix job descriptions (#78)
wangstagangstaa Feb 23, 2025
eee8ebe
frontend/jason/fix-readme (#81)
jason301c Feb 23, 2025
505631b
Frontend/jason/fix type error important (#82)
jason301c Feb 23, 2025
333297b
Add or update the Azure App Service build and deployment workflow config
monash-coding Feb 24, 2025
8d43f70
change working directory
wangstagangstaa Feb 24, 2025
0fb3785
fix release zip not found issue
wangstagangstaa Feb 24, 2025
194ac4c
fix minor tiny weeny bugs (#83)
jason301c Feb 24, 2025
cdee582
Add or update the Azure App Service build and deployment workflow config
monash-coding Feb 24, 2025
d99d15c
Frontend/jason/ssr optimizations (#94)
jason301c Feb 27, 2025
54ab120
Bump mongodb from 6.13.0 to 6.13.1 in /frontend (#93)
dependabot[bot] Feb 27, 2025
ab874c3
Bump postcss from 8.5.2 to 8.5.3 in /frontend (#92)
dependabot[bot] Feb 27, 2025
d5eac0f
Bump prettier from 3.5.1 to 3.5.2 in /frontend (#89)
dependabot[bot] Feb 27, 2025
6051b17
Bump @eslint/eslintrc from 3.2.0 to 3.3.0 in /frontend (#87)
dependabot[bot] Feb 27, 2025
5be04e6
Bump isomorphic-dompurify from 2.21.0 to 2.22.0 in /frontend (#88)
dependabot[bot] Feb 27, 2025
59cce84
Bump eslint from 9.20.1 to 9.21.0 in /frontend (#90)
dependabot[bot] Feb 27, 2025
ca08368
Enable user to copy direct links to job detail components (#86)
oliverhuangcode Feb 27, 2025
c872f52
use svh so mobile respects borders (#96)
wangstagangstaa Feb 28, 2025
3d6fee0
remove azure deployment for vercel (#98)
wangstagangstaa Mar 1, 2025
928416c
add vercel analytics (#99)
monash-coding Mar 1, 2025
21ce947
Update job-card.tsx (#100)
wangstagangstaa Mar 1, 2025
08da252
fix results text wrapping (#101)
wangstagangstaa Mar 1, 2025
a534775
add speed insights (#102)
monash-coding Mar 1, 2025
cfaa9bd
Frontend/edwin/minor optimisations (#103)
wangstagangstaa Mar 1, 2025
db52d83
minor ui fixes (#104)
wangstagangstaa Mar 2, 2025
89c5dcf
add google analytics (#105)
monash-coding Mar 2, 2025
8a43556
Sponsor section (#106)
oliverhuangcode Mar 5, 2025
853cf78
fix company name not truncated properly in job-card (#116)
jason301c Mar 7, 2025
e889ce8
Optimized sponsor selection and presentation (#117)
kyranaus Mar 9, 2025
02d4f42
Fixed filter url mismatch (#118)
kyranaus Mar 9, 2025
1a5f69f
Fixed prose overflow (#119)
kyranaus Mar 9, 2025
a1fd258
Frontend/edwin/feedback (#121)
wangstagangstaa Mar 9, 2025
3107ea2
add opengraph image and dynamic metadata (#122)
wangstagangstaa Mar 9, 2025
afbd166
Frontend/edwin/update og and readme (#123)
wangstagangstaa Mar 9, 2025
ae9d352
Frontend/edwin/minor fixes (#124)
wangstagangstaa Mar 10, 2025
38b81cc
Update actions.ts (#137)
wangstagangstaa Mar 18, 2025
2ef4f56
Bump eslint from 9.21.0 to 9.22.0 in /frontend (#136)
dependabot[bot] Mar 18, 2025
4f16e1e
Bump mongodb from 6.13.1 to 6.14.2 in /frontend (#134)
dependabot[bot] Mar 18, 2025
6bec6a9
Bump prettier from 3.5.2 to 3.5.3 in /frontend (#111)
dependabot[bot] Mar 18, 2025
41eb605
Merge remote-tracking branch 'origin/production' into development
wangstagangstaa Apr 15, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 0 additions & 3 deletions .github/workflows/lint-checker.yml
Original file line number Diff line number Diff line change
@@ -1,9 +1,6 @@
name: Frontend Lint Checker

on:
push:
paths:
- 'frontend/**'
pull_request:
paths:
- 'frontend/**'
Expand Down
5 changes: 5 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -59,5 +59,10 @@ desktop.ini
*.bak
*.backup

# Lock file for pnpm
pnpm-lock.yaml

/repo-to-text/

# Typescript build info
frontend/tsconfig.tsbuildinfo
35 changes: 22 additions & 13 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,18 +1,28 @@
# MPloy Job Board
# MAC Job Board

A modern job board application built with Next.js, Spring Boot, and Go, designed to help students find internships and job opportunities.
Hey there! 👋

### Frontend
- Next.js 15 with App Router
- React 19
- TypeScript
- Mantine UI
- Tailwind CSS
This is a modern, intelligent job board platform that automatically aggregates job listings, providing users with a streamlined experience to search, filter, and discover relevant opportunities. The platform updates daily with fresh listings through our smart AI robots.

### Backend
- Spring Boot (Kotlin)
- Redis for caching
- RESTful APIs
## Features 🚀
- Jobs update automatically every single day from various sources (automatically deduplicated)
- We use AI to help fix, sort and summarise the listings
- You can filter for exactly what you want (e.g. Big Tech Intern Roles for Interational students)
- Works perfectly on phone or laptop

## Frontend

- Next.js 15: Utilizing the App Router for server-side rendering and optimized client-side navigation
- React 19: For building the interactive user interface components
- TypeScript: Ensuring type safety across the codebase
- Mantine UI: For consistent, accessible UI components
- Tailwind CSS: For utility-first styling and responsive design

## Backend

- Server Actions: Answers search and feedback requests
- MongoDB: Stores job listings and related metadata
- GoLang: Powers our web robots (this part is not open source)

## Getting Started

Expand Down Expand Up @@ -53,7 +63,6 @@ cd backend
Examples:
- backend/edwn/redis-caching
- frontend/sarah/job-filters
- fullstack/alex/docker-setup
```

## License
Expand Down
4 changes: 3 additions & 1 deletion backend/Dockerfile.dev
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
FROM gradle:8.12-jdk21 AS build
WORKDIR /app
ENV HOME /root
COPY . .
RUN chmod +x ./gradlew
CMD ["./gradlew", "bootRun"]
RUN chmod +x start.sh && ./gradlew getDependencies
CMD ["sh", "start.sh"]
19 changes: 18 additions & 1 deletion backend/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ repositories {
}

dependencies {
developmentOnly("org.springframework.boot:spring-boot-devtools")
implementation("org.springframework.boot:spring-boot-starter")
implementation("org.jetbrains.kotlin:kotlin-reflect")
implementation("org.springframework.boot:spring-boot-starter-web")
Expand All @@ -29,4 +30,20 @@ kotlin {
compilerOptions {
freeCompilerArgs.addAll("-Xjsr305=strict")
}
}
}

tasks.register<Copy>("getDependencies") {
from(sourceSets.main.get().runtimeClasspath)
into("runtime/")

doFirst {
val runtimeDir = File("runtime")
runtimeDir.deleteRecursively()
runtimeDir.mkdir()
}

doLast {
File("runtime").deleteRecursively()
}
}

Original file line number Diff line number Diff line change
Expand Up @@ -27,4 +27,4 @@ class HelloController(
throw e
}
}
}
}
11 changes: 10 additions & 1 deletion backend/src/main/resources/application.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,4 +17,13 @@ logging:
io.lettuce.core: DEBUG

server:
port: 8080
port: 8080

devtools:
restart:
enabled: true

# Enable LiveReload if needed
spring.devtools.livereload.enabled: true

spring.devtools.reload.trigger-file: .reloadtrigger
6 changes: 6 additions & 0 deletions backend/start.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
# Start spring boot devtools process in the background.
# This is necessary for hot reload.
(./gradlew -t :bootJar) &
# Next, start the app.
# The "PskipDownload" option ensures dependencies are not downloaded again.
./gradlew bootRun -PskipDownload=true --parallel --build-cache --continuous
89 changes: 48 additions & 41 deletions docker-compose.dev.yml
Original file line number Diff line number Diff line change
@@ -1,41 +1,48 @@
version: '3.8'

services:
redis:
image: redis:alpine
ports:
- "6379:6379"
networks:
- mploy-network

backend:
build:
context: ./backend
dockerfile: Dockerfile.dev
ports:
- "8080:8080"
environment:
- REDIS_HOST=redis
- REDIS_PORT=6379
networks:
- mploy-network
depends_on:
- redis

frontend:
build:
context: ./frontend
dockerfile: Dockerfile.dev
ports:
- "3000:3000"
volumes:
- ./frontend:/app
- /app/node_modules
environment:
- NEXT_PUBLIC_API_URL=http://localhost:8080
networks:
- mploy-network

networks:
mploy-network:
driver: bridge
services:
# redis:
# image: redis:alpine
# ports:
# - "6379:6379"
# networks:
# - mploy-network

# backend:
# build:
# context: ./backend
# dockerfile: Dockerfile.dev
# develop:
# watch:
# - action: rebuild
# path: ./backend/src # Watch the entire src directory
# volumes:
# - ./backend:/app
# ports:
# - "35729:35729"
# - "8080:8080"
# environment:
# - SPRING_PROFILES_ACTIVE=dev
# - SPRING_DEVTOOLS_RESTART_ENABLED=true
# - REDIS_HOST=redis
# - REDIS_PORT=6379
# networks:
# - mploy-network
# depends_on:
# - redis

frontend:
build:
context: ./frontend
dockerfile: Dockerfile.dev
ports:
- "3000:3000"
volumes:
- ./frontend:/app
- /app/node_modules
environment:
- NEXT_PUBLIC_API_URL=http://localhost:8080
networks:
- mploy-network

networks:
mploy-network:
driver: bridge
1 change: 0 additions & 1 deletion frontend/.env

This file was deleted.

54 changes: 53 additions & 1 deletion frontend/.gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -37,4 +37,56 @@ jspm_packages
.node_repl_history
.next

.idea
.idea

# Node.js
node_modules/
yarn-debug.log*
yarn-error.log*

# MonoRepo Specific
/packages/*/node_modules/
**/dist/
**/build/

# OS-specific
.DS_Store
Thumbs.db

# IDEs and Editors
.idea/
.vscode/
*.swp
*.swo

# Testing
coverage/
**/__pycache__/
*.py[cod]
*.sqlite

# Miscellaneous
.env
.env.local
*.local
*.lock
*.bak
*.tmp
*.backup
*.orig

# Ignored by custom tooling
*.cache
*.output
*.pidfile

# System Files
*.iml
*.sublime-workspace
*.sublime-project
desktop.ini

/repo-to-text/

# TypeScript build info
tsconfig.tsbuildinfo
3 changes: 2 additions & 1 deletion frontend/Dockerfile.dev
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
FROM node:22-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install
RUN npm ci
COPY . .
RUN npm list mongodb
CMD ["npm", "run", "dev"]
6 changes: 3 additions & 3 deletions frontend/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@ MPloy is a very simple job board with search, filter and just a website that dis
│ │ │ └── nav-bar.tsx # Navigation bar
│ ├── context
│ │ ├── jobs
│ │ │ └── jobs-context.tsx # Job state and actions context
│ │ │ └── filter-context.tsx # Job state and actions context
│ │ │ └── jobs-provider.tsx # Provider wrapper with initial state
│ ├── hooks
│ │ ├── use-job-filters.ts # Filter logic and state management
Expand Down Expand Up @@ -167,10 +167,10 @@ useEffect(() => {
When user searches:

1. SearchBar component calls useJobSearch().updateSearch()
2. useJobSearch updates JobsContext filters
2. useJobSearch updates FilterContext filters
3. useUrlState syncs new state to URL
4. useJobSearch triggers API call with new filters
5. Results update in JobsContext
5. Results update in FilterContext
6. JobList component re-renders with new data

When user opens job details:
Expand Down
Loading