Skip to content
← All patterns

employment

Job Board

Which jobs are open right now?

Post jobs, take applications and list open roles, newest first.

Companies, job postings, applicants, applications and saved jobs share one table. Only open jobs carry the keys for the GSI1 index, so querying it lists live jobs, and filling a job removes it from the index without deleting the posting. FeaturedIndex does the same for featured jobs.

The model

Company

An employer who posts job listings

pk
COMPANY#<companyId>
sk
COMPANY#<companyId>

Attributes: PK (S), SK (S), companyId (S), name (S), industry (S), size (S), website (S), logoUrl (S), description (S), headquarters (S), foundedYear (N), createdAt (S)

JobPosting

A job listing posted by a company

pk
COMPANY#<companyId>
sk
JOB#<jobId>

Attributes: PK (S), SK (S), GSI1PK (S), GSI1SK (S), GSI2PK (S), GSI2SK (S), FeaturedPK (S), FeaturedSK (S), jobId (S), companyId (S), companyName (S), title (S), description (S), requirements (L), location (S), remoteType (S), employmentType (S), salaryMin (N), salaryMax (N), salaryCurrency (S), status (S), isFeatured (BOOL), applicationCount (N), postedAt (S), expiresAt (S), createdAt (S)

Applicant

A job seeker who can apply to positions

pk
APPLICANT#<applicantId>
sk
APPLICANT#<applicantId>

Attributes: PK (S), SK (S), applicantId (S), firstName (S), lastName (S), email (S), phone (S), resumeUrl (S), linkedinUrl (S), currentTitle (S), yearsExperience (N), skills (SS), preferredLocations (SS), createdAt (S)

Application

An applicant's submission to a job posting

pk
JOB#<jobId>
sk
APP#<applicantId>

Attributes: PK (S), SK (S), GSI3PK (S), GSI3SK (S), applicationId (S), jobId (S), applicantId (S), jobTitle (S), companyName (S), status (S), coverLetter (S), customResumeUrl (S), notes (S), appliedAt (S), updatedAt (S)

SavedJob

A job saved/bookmarked by an applicant

pk
APPLICANT#<applicantId>
sk
SAVED#<jobId>

Attributes: PK (S), SK (S), applicantId (S), jobId (S), jobTitle (S), companyName (S), savedAt (S)

FeaturedSection

Singleton item for curated homepage featured jobs

pk
FEATURED
sk
FEATURED

Attributes: PK (S), SK (S), title (S), description (S), jobIds (L), updatedAt (S)

Access patterns

  • QueryGet company's job postings

    List all job postings for a specific company

  • Query · GSI1Browse active jobs

    List active job postings sorted by posting date (most recent first)

  • Query · GSI2Filter jobs by location and salary

    Find jobs in a specific city with salary filtering

  • Query · GSI3Get applicant's application history

    List all applications submitted by an applicant

  • QueryGet all applications for a job

    List all applications submitted for a specific job

  • Query · FeaturedIndexGet featured job listings

    Query the sparse Featured index for premium listings

  • UpdateItemMark job as filled

    Update job status to filled, which removes it from GSI1 (sparse)

  • GetItemGet company details

    Fetch one company's profile.

  • QueryGet applicant profile

    Fetch one applicant's profile, without the jobs they have saved.

  • QueryGet applicant's saved jobs

    List the jobs an applicant has bookmarked.

  • QueryGet featured section content

    Read the curated featured section the homepage renders.

Design notes

Sparse index for active jobswhy

GSI1 only contains active jobs. When a job is filled or expired, removing GSI1PK and GSI1SK removes it from the index. No delete needed - just an UpdateItem removing those attributes.

Featured index is sparsewhy

Only jobs with isFeatured=true have the FeaturedPK/FeaturedSK attributes. This keeps the index small and fast for homepage queries. INCLUDE projection minimises storage.

Denormalised company and job infotrade-off

Application items include jobTitle and companyName to display application history without additional lookups. If company renames, historical applications show old name (usually desired behaviour).

Salary in GSI2 sort keygotcha

Storing salary as GSI2SK enables range queries (>= minSalary). Zero-padded for correct string sorting: "SALARY#0000120000". Alternative: use Number type but requires careful padding.

Singleton for featured sectionalternative

FeaturedSection is a singleton item (PK=SK="FEATURED") storing curated job IDs. Alternative would be tagging jobs as featured and querying, but singleton gives explicit control over order.

A filled job leaves the indextrade-off

Mark job as filled sets job-002's status to filled and removes GSI1PK and GSI1SK, on condition that it is still active, so Browse active jobs returns one posting fewer afterwards. Run it again and it is refused, because the job is no longer active.

Taught in the course

job-boardDynamoDB workbench
Ready to run
Explore an access patternSelect to load & run

List all job postings for a specific company

Request
Execute against the local Dynoxide engine
ReturnedFiltered outChanged
PK(pk)
SK(sk)
companyId
createdAt
description
foundedYear
headquarters
industry
name
size
website
FeaturedPK
FeaturedSK
GSI1PK
GSI1SK
GSI2PK
GSI2SK
applicationCount
companyName
employmentType
expiresAt
isFeatured
jobId
location
postedAt
remoteType
requirements
salaryCurrency
salaryMax
salaryMin
status
title
applicantId
currentTitle
email
firstName
lastName
phone
preferredLocations
resumeUrl
skills
yearsExperience
GSI3PK
GSI3SK
applicationId
appliedAt
coverLetter
jobTitle
updatedAt
savedAt
jobIds
COMPANY#c-001
COMPANY#c-001S
c-001S
2025-09-14T00:00:00ZS
Building the future of workflow automationS
2019N
San Francisco, CAS
SoftwareS
TechFlow IncS
mediumS
https://techflow.example.comS
—
—
—
—
—
—
—
—
—
—
—
—
—
—
—
—
—
—
—
—
—
—
—
—
—
—
—
—
—
—
—
—
—
—
—
—
—
—
—
—
COMPANY#c-001
JOB#job-001S
c-001S
2026-09-27T09:00:00ZS
Join our platform team to build scalable APIsS
—
—
—
—
—
—
FEATURED#trueS
PRIORITY#1S
STATUS#activeS
POSTED#2026-10-01S
LOCATION#San FranciscoS
SALARY#0000120000S
23N
TechFlow IncS
full_timeS
2026-10-30T23:59:59ZS
trueBOOL
job-001S
San FranciscoS
2026-10-01T10:00:00ZS
hybridS
[3]L
USDS
180000N
120000N
activeS
Senior Backend EngineerS
—
—
—
—
—
—
—
—
—
—
—
—
—
—
—
—
—
—
—
COMPANY#c-001
JOB#job-002S
c-001S
2026-10-03T11:00:00ZS
Create beautiful user experiences with ReactS
—
—
—
—
—
—
—
—
STATUS#activeS
POSTED#2026-10-05S
LOCATION#RemoteS
SALARY#0000090000S
45N
TechFlow IncS
full_timeS
2026-11-03T23:59:59ZS
falseBOOL
job-002S
RemoteS
2026-10-05T14:00:00ZS
remoteS
[3]L
USDS
140000N
90000N
activeS
Frontend DeveloperS
—
—
—
—
—
—
—
—
—
—
—
—
—
—
—
—
—
—
—
APPLICANT#a-001
APPLICANT#a-001S
—
2026-09-19T16:30:00ZS
—
—
—
—
—
—
—
—
—
—
—
—
—
—
—
—
—
—
—
—
—
—
—
—
—
—
—
—
a-001S
Software EngineerS
alex.rivera@email.comS
AlexS
RiveraS
+1-555-0123S
San Francisco, RemoteSS
https://storage.example.com/resumes/alex-rivera.pdfS
JavaScript, Python, AWS, PostgreSQLSS
5N
—
—
—
—
—
—
—
—
—
APPLICANT#a-001
SAVED#job-002S
—
—
—
—
—
—
—
—
—
—
—
—
—
—
—
—
TechFlow IncS
—
—
—
job-002S
—
—
—
—
—
—
—
—
—
a-001S
—
—
—
—
—
—
—
—
—
—
—
—
—
—
Frontend DeveloperS
—
2026-10-06T10:00:00ZS
—
JOB#job-001
APP#a-001S
—
—
—
—
—
—
—
—
—
—
—
—
—
—
—
—
TechFlow IncS
—
—
—
job-001S
—
—
—
—
—
—
—
reviewingS
—
a-001S
—
—
—
—
—
—
—
—
—
APPLICANT#a-001S
APPLIED#2026-10-10S
app-001S
2026-10-10T09:15:00ZS
I am excited to apply for this position...S
Senior Backend EngineerS
2026-10-12T14:00:00ZS
—
—
FEATURED
FEATUREDS
—
—
Top jobs from leading companiesS
—
—
—
—
—
—
—
—
—
—
—
—
—
—
—
—
—
—
—
—
—
—
—
—
—
—
Featured OpportunitiesS
—
—
—
—
—
—
—
—
—
—
—
—
—
—
—
—
2026-10-01T12:00:00ZS
—
[1]L
Awaiting request
Your next query starts here.

Choose an access pattern above, or build your own request. See what comes back and what it costs.

Write transactions, streams, tags and TTL are among the operations this browser build leaves out. dynoxide's native build has them.