Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
125 commits
Select commit Hold shift + click to select a range
be6839c
Create README.md (#5) (#6)
edwnl Jan 22, 2025
0352109
shared/edwn/clean up (#7)
edwnl Jan 22, 2025
35ab425
ci: add Azure Static Web Apps workflow file
monash-coding Jan 22, 2025
37dbc1d
frontend/edwin/add mock data (#10)
edwnl Jan 23, 2025
f35ced3
use npm clean install instead (#11)
edwnl 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)
edwnl 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)
edwnl 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)
edwnl Feb 1, 2025
31fc2a2
add clearing filters & no results page (#39)
edwnl 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)
edwnl 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)
edwnl Feb 11, 2025
834808c
Frontend/kyran/quickfixes (#51)
kyranaus Feb 12, 2025
e3689ea
Frontend/edwin/filter search fixes (#62)
edwnl 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)
edwnl 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)
edwnl Feb 22, 2025
b63b7ec
Frontend/edwin/homepage (#79)
edwnl Feb 23, 2025
c5c7d92
Frontend/edwin/fix job descriptions (#78)
edwnl 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
edwnl Feb 24, 2025
0fb3785
fix release zip not found issue
edwnl 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)
edwnl Feb 28, 2025
3d6fee0
remove azure deployment for vercel (#98)
edwnl Mar 1, 2025
928416c
add vercel analytics (#99)
monash-coding Mar 1, 2025
21ce947
Update job-card.tsx (#100)
edwnl Mar 1, 2025
08da252
fix results text wrapping (#101)
edwnl Mar 1, 2025
a534775
add speed insights (#102)
monash-coding Mar 1, 2025
cfaa9bd
Frontend/edwin/minor optimisations (#103)
edwnl Mar 1, 2025
db52d83
minor ui fixes (#104)
edwnl 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)
edwnl Mar 9, 2025
3107ea2
add opengraph image and dynamic metadata (#122)
edwnl Mar 9, 2025
afbd166
Frontend/edwin/update og and readme (#123)
edwnl Mar 9, 2025
ae9d352
Frontend/edwin/minor fixes (#124)
edwnl Mar 10, 2025
38b81cc
Update actions.ts (#137)
edwnl 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
edwnl Apr 15, 2025
e6eb5f2
create dockerfile for dev environment
edwnl Apr 28, 2025
a2b3ed4
remove public folder as its not used
edwnl Apr 28, 2025
c93b61f
include env variables
edwnl Apr 28, 2025
cfcce3f
Update working right display logic (#159)
Brian-w-m May 6, 2025
b3bc6f1
Update workflow to use Azure Container Registry
jason301c Sep 25, 2025
409e611
Create two workflows for dev and prod
jason301c Sep 25, 2025
e9ed54e
Delete legacy backend
jason301c Sep 25, 2025
cf8132f
Add Pino for structured logging
jason301c Sep 25, 2025
24b3499
Consolidate README
jason301c Sep 25, 2025
e51e6a3
Fix build errors
jason301c Sep 25, 2025
1f12124
Fix build issues with pino-pretty unavailability
jason301c Sep 25, 2025
ad75be7
Fix pino pretty error, resort to piping
jason301c Sep 25, 2025
52ed9a2
Fix dev dockerfile
jason301c Sep 25, 2025
3460bbb
Minor fix to dev dockerfile
jason301c Sep 25, 2025
77cccd4
Update workflows to format keys properly
jason301c Sep 25, 2025
3bdf5a2
Improve workflows with caching
jason301c Sep 25, 2025
fa947c1
Implement caching properly for both dev and prod workflows and docker…
jason301c Sep 25, 2025
38611a0
Fix copying package.json
jason301c Sep 25, 2025
901b139
Fix MAC logo taking up whole screen
jason301c Sep 25, 2025
2e6535f
Unify dockerfile and fix env parsing
jason301c Sep 25, 2025
134a986
fix environment variable parsing
jason301c Sep 25, 2025
758bdd2
fix environment variable parsing (2)
jason301c Sep 25, 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
71 changes: 71 additions & 0 deletions .github/workflows/azure-acr-deploy-frontend-dev.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
name: Frontend - Build and Deploy on Azure (Dev)

on:
push:
branches: [development]
paths:
- "frontend/**"
- ".github/workflows/azure-deploy-frontend-dev.yml"
workflow_dispatch:

env:
REGISTRY: mploycontainerregistry-hncsekeah2gagbgb.azurecr.io
FRONTEND_IMAGE_NAME: nextjs-frontend

jobs:
build-and-push:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
with:
driver-opts: |
image=moby/buildkit:latest
network=host

- name: Log in to Azure Container Registry
uses: docker/login-action@v3
with:
registry: ${{ env.REGISTRY }}
username: ${{ secrets.ACR_USERNAME }}
password: ${{ secrets.ACR_PASSWORD }}

- name: Build and push image (with ACR cache)
uses: docker/build-push-action@v6
with:
context: ./frontend
file: ./frontend/Dockerfile
push: true
tags: |
${{ env.REGISTRY }}/${{ env.FRONTEND_IMAGE_NAME }}:development
cache-from: type=registry,ref=${{ env.REGISTRY }}/${{ env.FRONTEND_IMAGE_NAME }}:buildcache
cache-to: type=registry,ref=${{ env.REGISTRY }}/${{ env.FRONTEND_IMAGE_NAME }}:buildcache,mode=max

deploy:
needs: build-and-push
runs-on: ubuntu-latest
environment: development
steps:
- name: Azure login
uses: azure/login@v2
with:
creds: ${{ secrets.AZURE_CREDENTIALS }}

- name: Deploy to Azure Container Apps (Dev)
uses: azure/container-apps-deploy-action@v2
with:
registryUrl: ${{ env.REGISTRY }}
registryUsername: ${{ secrets.ACR_USERNAME }}
registryPassword: ${{ secrets.ACR_PASSWORD }}
containerAppName: mploy-frontend-dev
resourceGroup: ${{ secrets.AZURE_RESOURCE_GROUP_DEV }}
imageToDeploy: ${{ env.REGISTRY }}/${{ env.FRONTEND_IMAGE_NAME }}:development
targetPort: 3000
environmentVariables: >
NOTION_API_KEY=${{ secrets.NOTION_API_KEY }}
NOTION_DATABASE_ID=${{ secrets.NOTION_DATABASE_ID }}
MONGODB_URI=${{ secrets.MONGODB_URI }}
NODE_ENV=development
78 changes: 78 additions & 0 deletions .github/workflows/azure-acr-deploy-frontend-prod.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
name: Frontend - Build and Deploy on Azure (Prod)

on:
push:
branches: [production]
paths:
- "frontend/**"
- ".github/workflows/azure-deploy-frontend-prod.yml"
workflow_dispatch:

env:
REGISTRY: mploycontainerregistry-hncsekeah2gagbgb.azurecr.io
FRONTEND_IMAGE_NAME: nextjs-frontend

jobs:
build-and-push:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
with:
driver-opts: |
image=moby/buildkit:latest
network=host

- name: Log in to Azure Container Registry
uses: docker/login-action@v3
with:
registry: ${{ env.REGISTRY }}
username: ${{ secrets.ACR_USERNAME }}
password: ${{ secrets.ACR_PASSWORD }}

- name: Set version tag
id: vars
run: |
VERSION="v$(date +'%Y.%m.%d')-${GITHUB_RUN_NUMBER}"
echo "version=$VERSION" >> $GITHUB_OUTPUT

- name: Build and push :production and versioned tags (with ACR cache)
uses: docker/build-push-action@v6
with:
context: ./frontend
file: ./frontend/Dockerfile
push: true
tags: |
${{ env.REGISTRY }}/${{ env.FRONTEND_IMAGE_NAME }}:production
${{ env.REGISTRY }}/${{ env.FRONTEND_IMAGE_NAME }}:${{ steps.vars.outputs.version }}
cache-from: type=registry,ref=${{ env.REGISTRY }}/${{ env.FRONTEND_IMAGE_NAME }}:buildcache
cache-to: type=registry,ref=${{ env.REGISTRY }}/${{ env.FRONTEND_IMAGE_NAME }}:buildcache,mode=max

deploy:
needs: build-and-push
runs-on: ubuntu-latest
environment: production
steps:
- name: Azure login
uses: azure/login@v2
with:
creds: ${{ secrets.AZURE_CREDENTIALS }}

- name: Deploy to Azure Container Apps (Prod)
uses: azure/container-apps-deploy-action@v2
with:
registryUrl: ${{ env.REGISTRY }}
registryUsername: ${{ secrets.ACR_USERNAME }}
registryPassword: ${{ secrets.ACR_PASSWORD }}
containerAppName: mploy-frontend
resourceGroup: ${{ secrets.AZURE_RESOURCE_GROUP_PROD }}
imageToDeploy: ${{ env.REGISTRY }}/${{ env.FRONTEND_IMAGE_NAME }}:production
targetPort: 3000
environmentVariables: >
NOTION_API_KEY=${{ secrets.NOTION_API_KEY }}
NOTION_DATABASE_ID=${{ secrets.NOTION_DATABASE_ID }}
MONGODB_URI=${{ secrets.MONGODB_URI }}
NODE_ENV=production

This file was deleted.

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
8 changes: 0 additions & 8 deletions Makefile

This file was deleted.

108 changes: 83 additions & 25 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,60 +1,118 @@
# MPloy Job Board
# MPLOY - 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 International students)
- Works perfectly on phone or laptop
- Server-side rendering (where possible) with Next.js 15 App Router
- Multiple filters can be applied at once, including text search
- Desktop/mobile responsive UI: list/details on desktop, modal on mobile
- State persists in URL: search, filters, pagination (`/jobs?q=dev&location=sydney&page=2`)
- Direct job links supported (`/jobs/[id]`)
- Parallel data fetching for faster loads
- Real-time job search with debouncing

## 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

### Key Patterns

- **State Management**: Start with props; use custom hooks for reusable logic; Context for global state (e.g., job filters).
- **Data Flow**: URL as source of truth for filters/search; debounced API calls; prefetching for pagination.
- **Components**: Keep thin (50-150 lines); use layouts for shared UI; mark client components with "use client".
- **Features Used**: Intercepting routes for modals; Suspense for loading; Error boundaries; useMemo/useRef for optimization.

### Structure

```
src/
├── app/
│ ├── jobs/ # Main jobs route with filters, listing, details
│ │ ├── [id]/ # Dynamic job page
│ │ └── error.tsx # Job-specific error handling
│ ├── layout.tsx # Root layout with providers
│ └── page.tsx # Home (redirects to /jobs)
├── components/
│ ├── jobs/ # Job cards, lists, details, filters
│ └── layout/ # Nav, logo, search bar
├── context/
│ └── filter/ # Filter state provider
└── lib/ # Utils, theme
```

## 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

### Prerequisites

- Node.js 20+
- Java 17
- Go 1.21+
- Docker & Docker Compose
- Redis

### Local Development
```bash
# Start all services
docker compose -f docker-compose.dev.yml up
# Alternative if Make is installed
make dev

# Frontend only
```bash
cd frontend
npm install
npm run dev
```

## Environment Variables

# Backend only
cd backend
./gradlew bootRun
```
MONGODB_URI=
MONGODB_DATABASE=default
MONGODB_COLLECTION=listings

NODE_ENV=development
```

## Development Guidelines

### Git Workflow

#### Branch Structure
- `main` - Production branch

- `production` - Production branch
- `dev` - Development branch
- Feature branches follow the pattern:
```
<component>/<developer>/<feature-name>
Examples:
- backend/edwn/redis-caching
- frontend/sarah/job-filters
- fullstack/alex/docker-setup
```


### Coding Conventions

- Use kebab-case for files (e.g., `product-card.ts`); camelCase for hooks (e.g., `useCustomHook`).
- Group related components in feature directories (e.g., `components/jobs/filters/`).
- Prioritize server components; use "use client" only when needed.
- Build with scalability and observability in mind (e.g., structured logging with Pino).

## Deployment (Development and Production)

- We are deployed on Azure Container Apps via Github Actions.
- GitHub Actions -> builds containers -> Azure Containers Registry -> Azure Container Apps.

## License
This project is licensed under the MIT License.

This project is licensed under the MIT License.
3 changes: 0 additions & 3 deletions backend/.gitattributes

This file was deleted.

Loading