Skip to content

julianrios/job-tracker-serverless

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

job-tracker-serverless

Current status: POC in progress

A production-style serverless web application built with React, AWS CDK, and AWS managed services to track job applications and application status.

Why I Built This

This project demonstrates a production-style serverless architecture using AWS CDK and managed services. It is designed to:

  • Showcase infrastructure-as-code (IaC) practices
  • Demonstrate authentication via JWT (Cognito)
  • Model real-world CRUD patterns with DynamoDB
  • Separate development and stable release branches

Architecture

flowchart LR
    User[User / Browser]

    CF[CloudFront]
    S3[S3 Bucket - React Static Site]

    Cognito[Cognito User Pool - JWT Tokens]

    APIG[API Gateway - JWT Authorizer]
    Lambda[Lambda - Node.js Backend]
    DDB[DynamoDB]

    User --> CF
    CF --> S3

    User --> Cognito
    Cognito --> User

    User --> APIG
    APIG --> Lambda
    Lambda --> DDB
Loading

Tech Stack

  • Frontend: React + TypeScript
  • Infrastructure: AWS CDK (TypeScript)
  • Hosting: S3 + CloudFront
  • Authentication: Cognito User Pools (JWT)
  • API: API Gateway (HTTP API)
  • Compute: AWS Lambda (Node.js)
  • Database: DynamoDB

Local Development

Backend

cd backend
npm install
npm run dev

Runs on: http://localhost:3001

Frontend

cd frontend
npm install
npm run dev

Runs on: http://localhost:5173


Current Progress

  • CDK project initialized
  • API Gateway + Lambda deployed
  • DynamoDB table created
  • React app scaffolded
  • Frontend connected to backend
  • Cognito authentication integrated
  • Deployed to CloudFront

Tech Debt / Suggestions

  • appliedDate is only checked as a string; consider validating/parsing it (e.g., ISO date) to avoid inconsistent formats.
  • Replace DEMO_USER_ID with an authenticated user id when integrating auth.
  • Use a validation library (zod/joi) or request DTOs for clearer and more maintainable input validation.
  • If the store becomes async (real DB), make handlers async and await persistence; also consider returning a Location header for the new resource.
  • Consider an environment variable for the port (e.g., process.env.PORT ?? 3001), tighten CORS for production, add request-logging and error-handling middleware, and implement graceful shutdown for the server.
  • Add reserved concurrency to Applications Lambda to cap cost
  • Add caching strategy notes (CloudFront for frontend; API caching not needed yet) You can bridge that by adding one small AI feature:
  • “Given a job description, extract keywords + generate tailored bullet points” (calls an LLM)
  • Save results per application

About

“Current status: POC in progress”

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors