This is a submission for the Postmark Challenge: Inbox Innovators.
❔ What I Built
I created a low-friction job postings management dashboard with applicant parsing and a job board for potential candidates to apply.
⏩ TLDR
-
Job Posts Dashboard:
- Create and manage jobs.
- Track, evaluate and communicate directly with candidates and their applications within the app.
-
Job Board Site:
- View and apply to jobs created on the dashboard.
-
Postmark implementation:
- Receive candidate applications - inbound email.
- Auto send confirmation of application - transactional email.
- Email communication between the candidate and admin - transactional email.
💻 Demo
Code Repository
arndom
/
job-board-admin
Jobs management dashboard & applicant parser powered by postmark
🧠 JobBoard Admin: Jobs Management Dashboard & Applicant Parser
A full-stack recruitment dashboard demo that parses email-based job applications, extracts applicant data (including CVs and cover letters), stores and scores them intelligently, and allows admins to manage and communicate with candidates — all from a unified Supabase-powered UI.
There's a demo app to view the jobs:
✨ Features
-
📥 Email-Based Applications Applicants apply via email to dynamic addresses like
xcxcxc@{custom.domain.com}
. -
🔐 DKIM, Return-Path, and MX Setup Fully authenticated sending and receiving under a custom subdomain.
-
🧠 AI-Powered Parsing & Scoring Cloudflare Workers + LLM extract:
- Timezone & location
- Trust score (e.g., LinkedIn, GitHub presence)
- Seniority level
- Sentiment analysis (CV, cover letter)
- Match % with job description
-
📂 Supabase Storage Integration Stores and retrieves uploaded CVs and cover letters.
-
📊 Admin Dashboard UI Built with Refine + Material UI:
- View all jobs, applicants, applications
- Track trust score, match…
arndom
/
job-board-site
Job application demo site for https://github.com/arndom/job-board-admin
💼 Remote Job Board — Email-Based Applications
A simple job board built as demo for the JobBoard admin app:
Built with Next.js, Tailwind CSS, and Supabase — designed for email-driven applications. Applicants apply by sending emails..
✨ Features
-
📃 Live Job Listings
- Publicly viewable jobs pulled from Supabase
- Styled with
shadcn/ui
and Tailwind
-
✉️ Email-to-Apply
- Each job post displays a unique email (e.g.,
xcxcxc@{custom.domain.com}
) - Clicking opens the user’s email client with prefilled email, subject, body.
- Each job post displays a unique email (e.g.,
-
💻 Responsive Design
- Clean, minimal, and responsive with
shadcn/ui
+ Tailwind
- Clean, minimal, and responsive with
-
⚡ Built with:
- Next.js (App Router)
- pnpm
- Supabase (for job data)
- Tailwind CSS
- shadcn/ui components
📸 Preview
⚙️ Local dev
- Setup .env
NEXT_PUBLIC_SUPABASE_URL=your-supabase-url
NEXT_PUBLIC_SUPABASE_KEY=your-key
- Add types from your supbase
npx supabase gen types typescript --project-id {projectId} > types/database.types.ts
- Run locally
pnpm install
pnpm dev
How I Built It
It was my first time hearing about Postmark, so I was unsure of what to build with it, and with limited time to join, I chose not to participate. When the hackathon got extended, I had more leeway and decided to go with what I see as a practical use of Postmark's inbound email parsing feature as part of a larger system: A job posts management dashboard for a small company.
I started by creating my database on Supabase, comprising tables for jobs, applicants and applications. The goal was speed, due to trying to get a lot done with my already tight schedule, so I used v0 to quickly draft the job board UI, which I tweaked after generation. Next, I used refine to create the base admin dashboard, added some material ui theme customisations and eventually got my layouts for both apps done. That was the easy part.
Setting up Postmark was relatively straightforward. I joined the platform and verified the subdomain jobs
of my portfolio site arndom.dev
by updating my DNS records for DKIM and Return-Path
next, I followed the Configure an Inbound Server guide and also updated my DNS records MX
value for inbound domain forwarding. These two steps would allow me to send and "receive" emails via my subdomain: [anything]@jobs.arndom.dev
.
I got started building my inbound webhook leveraging Supabase edge functions. I started with simple functionality like receiving the application email and extracting the necessary information:
Getting the job info based on the unique job email the candidate applied for.
Then, creating/updating a candidate(applicant) entry in the database, giving basic information like name and email, after which I created an application.
After getting that working and testing my flow end-to-end, from the job board to the job board dashboard, I began working on the evaluation of candidates with the use of an LLM.
I opted for a Cloudflare worker AI integration with Ollama simply because it was what I already knew.
After some fiddling around, I was able to produce some usable outputs and feed them into the tables.
-
I used the LLM to parse values:
- Calculate the match of the applicant to the job based on CV, letter, email body to job requirements, skills, and description.
- Calculate of applicant trust value based on "proof" of public URLs like github, and LinkedIn
I also added a confirmation email to be sent when the inbound email is done being processed.
At the time, I thought that was all, but with a bit more time on my hands, I went all in and added a communications feature within the app. I already had the send email functionality implemented, so I extended it by making another edge function to use in the admin via a chat interface.
This also led to creating an email table and making necessary changes to the inbound parser and send-email functions.
The last thing I did in development was fetch the jobs for the job board using Tanstack Query. After which, I deployed everything and wrote some documentation. Overall, it was a fun and interesting build. Learnt a lot more about the DNS system thanks to this.
Thanks for reading, do check out the apps Dashboard, Job board and have a day👋.
Top comments (1)
Pretty cool build, gotta respect putting all that together while learning new tools. Makes me wanna dive into building again.
Some comments may only be visible to logged-in visitors. Sign in to view all comments.