RY
All projects
2025·Solo (AWS course)·Archived

Bulletin Board

Serverless bulletin board on AWS.

Summary

A serverless bulletin board where users can post, edit, and view messages. Backend validation that messages exist before edits, sorting by date, and per-user filtering (filtering happens in the backend, not the frontend). AWS course project.

Stack

ReactAWS S3API GatewayLambdaDynamoDBServerless Framework

Highlights

  • Fully serverless - no servers to maintain
  • Filtering and sorting in the backend, not the frontend
  • Validation at the Lambda layer before any database write

Background

AWS course project. Build a serverless bulletin board - users can post, edit, and view messages, all without maintaining a server.

The architecture

React (S3) → API Gateway → Lambda → DynamoDB

Fully event-driven, no always-on backend.

Technical choices

  • React frontend hosted statically on AWS S3
  • API Gateway as the routing layer to Lambda
  • Lambda for business logic and database calls
  • DynamoDB for data - fits this use case (key-value, no relational join logic needed)
  • Serverless Framework for deployment - the entire stack defined in serverless.yml and deployed with one command

Implementation details

Validation at the Lambda layer. When a user tries to edit a message, the Lambda first checks that the message actually exists in DynamoDB before writing. Returns 404 if it doesn't, instead of silently creating a new one.

Per-user filtering in the backend. The alternative - fetch everything and filter in the frontend - would be simpler but bad for data integrity and performance. Filtering happens in the Lambda against a DynamoDB index, so the frontend gets only what should actually be shown.

Sort by date. Same logic - sorting happens before the response leaves the Lambda.

What I took away

Serverless isn't free - every Lambda call has a cold start, and DynamoDB's query language is limited compared to SQL. But for an app this size the trade-off is worth it: zero maintenance, automatic scaling, pay only for actual usage.