cloud resume review chat contin. please see cloud resume review chat Jan 26 I'll search for our previous conversation about your Cloud Resume review. Relevant chats 4 results Great! I found our Cloud Resume review conversation from yesterday. I can see we discussed the architecture diagram structure you created with: Your Architecture Diagram Shows: Top: Backend systems (Visitor Counter API + Analytics System) Middle: CI/CD deployment (GitHub → Actions → OIDC → Terraform) Bottom: User flow (Route53 → CloudFront → S3 + API calls) We also created a LinkedIn post for you to use with the diagram: "Cloud Resume Challenge architecture - now fully managed with Terraform. Two backend Lambda functions: visitor counter API and daily analytics emails. OIDC authentication for GitHub Actions. Remote state with DynamoDB locking. Zero stored credentials. Production-grade Infrastructure as Code. stratajen.net #AWS #Terraform #CloudArchitecture #InfrastructureAsCode" What did you want to continue working on from that conversation? Are you ready to: Post that architecture diagram post? Work on something else from the Cloud Resume? Get feedback on the diagram itself? i hate to say this but emojis look gen ai so we should edit them in my blogs... 3:37 PM You're absolutely right - emojis in professional tech content do scream "AI-generated" and can make your posts look less authentic. For your LinkedIn posts, let's remove emojis entirely: Revised post (no emojis): "Cloud Resume Challenge architecture - now fully managed with Terraform. Two backend Lambda functions: visitor counter API and daily analytics emails. OIDC authentication for GitHub Actions. Remote state with DynamoDB locking. Zero stored credentials. Production-grade Infrastructure as Code. stratajen.net #AWS #Terraform #CloudArchitecture #InfrastructureAsCode" Moving forward for ALL your LinkedIn posts: No emojis No bullet points with emojis No "🚀" or "✨" or "💡" Straight professional text Let the content and your projects speak for themselves This applies to any future posts we create too. Real engineers don't emoji-spam their technical content. Should I go back and edit any other posts we've created to remove emojis? Or are you good to just apply this rule going forward? what? no my blogs 3:39 PM Oh! You mean your Medium blog posts - not LinkedIn. You're right - emojis in Medium articles do look AI-generated. Real technical writers don't use emojis in their blog posts. For your Medium blog about the Cloud Resume Challenge: No emojis in headers No emojis in bullet points No "✅" or "🚀" or "💡" Clean, professional technical writing Let your screenshots, code snippets, and architecture diagram do the visual work Have you already published the Medium post, or are you still writing it? If you're still writing it, I can help you review it and strip out any AI-looking elements (emojis, overly formatted sections, etc.) to make it sound more like authentic technical writing. Building a Job Alert System While Unemployed: A Reality Check - Jen Magruder Building a Cloud Engineering Career While My Toddler Destroyed My Sleep Schedule - Jen Magruder Migrating to Terraform: Remote State & OIDC | Jen Magruder Building a Job Alert System While Unemployed: A Reality Check - Jen Magruder
Back to Portfolio

Building a Job Alert System While Unemployed: A Reality Check

TL;DR (Too Long; Didn't Read): I spent 12 hours building an AWS serverless job searcher because I couldn't afford to spend half my day job hunting while studying for my AWS certification with a toddler who demands my full attention and counting every dollar.

The Problem

I've been unemployed for 16 months. I have a toddler. My husband works full time. We're counting every dollar.

Every morning, I'd wake up and start searching Indeed, LinkedIn, Dice, scrolling through hundreds of jobs. But here's the thing: with a toddler, you can't just block out "2 hours for job hunting."

Jobs post throughout the day. Your kid needs snacks. Wants you to play princesses. Demands your FULL attention during potty training (no diapers, we're doing this). You search for 20 minutes, get interrupted for "Mommy, come HERE right NOW," come back 2 hours later, lose your place, start over.

And honestly? I'm blessed to spend this time with my toddler. The toddler bosses me around, and that's fine. But it also means job hunting takes 4 to 5 hours spread across the entire day instead of a focused 2 hour block.

Most of those jobs? Required active TS/SCI clearance I don't have. Were in Maryland (60+ mile commute). Paid below what I need (has to cover more than just daycare costs). Were senior roles I'm not qualified for. Were scams or MLM schemes.

And even if you save a job search on popular job search engines? It throws in anything with "engineer" at the end. Search for "cloud engineer" and you'll get network engineer, software engineer, sales engineer, mechanical engineer. Search for "cloud support engineer" and it's the same mess. The filters don't actually filter.

By the end of the day, I was mentally exhausted. Studying for my AWS Solutions Architect certification? Forget it. I was done.

Something had to change.

The Solution (In Theory)

Build an automated job alert system that searches for cloud/DevOps jobs in Virginia, filters out clearance requirements, Maryland locations, and senior roles, emails me relevant jobs at 7 AM daily, and costs $0/month (because we're counting every dollar).

Stack: Lambda (Python), DynamoDB (job tracking), SNS (email alerts), EventBridge (scheduler), CloudFormation (infrastructure as code).

Simple, right?

Reality: 12 Hours of "Simple"

Hour 1 to 2: CloudFormation Setup

I started with the infrastructure. Four CloudFormation stacks: DynamoDB tables (jobs + seen jobs with 90 day TTL), SNS topic for email notifications, Lambda function, EventBridge scheduler.

First mistake: Used the wrong email in my SNS stack. Had to delete and redeploy. CloudFormation deletes take 2 to 5 minutes. Cool.

Second mistake: SNS topic ARN was wrong in Lambda environment variables. Spent 20 minutes debugging why emails weren't sending, only to realize I'd copied a Lambda runtime ARN instead of the SNS topic ARN.

YAY ME. Just keep making mistakes. It's fine. Everything's fine.

Hour 3 to 4.5: The Indeed RSS Disaster

My original plan: Use Indeed's RSS feeds. They're free, public, and return fresh jobs.

Plot twist: Indeed's RSS feeds don't work anymore. Or they do, but not reliably. The URLs are rss.indeed.com (not www.rss.indeed.com), but even then: "This page can't be reached. DNS_PROBE_FINISHED_NXDOMAIN"

Tried for over an hour. Nothing. Searched documentation. Tried different parameters. Tried the old www.indeed.com/rss format. Nope.

Turns out Indeed is phasing out RSS in favor of requiring paid API access in 2025.

Great.

Hour 4.5 to 6: Enter SerpAPI (And More Problems)

SerpAPI scrapes search engines for you. They have a free tier: 100 searches/month.

Spent 1.5 hours integrating it, configuring the Lambda function, testing, and getting errors.

Status Code 400: {'error': 'Unsupported `indeed` search engine.'}

Wait, what?

Checked my SerpAPI account dashboard. Zero searches used. It wasn't even reaching the API.

Kept testing. Kept checking. Finally realized: Indeed engine isn't supported on free tier. Requires $50/month.

We're counting every dollar. $50/month for job alerts? Absolutely not.

Problem 2: Switched to Google Jobs engine (free tier). Had to completely rewrite the Lambda function to handle Google's job structure instead of Indeed's.

Problem 3: Environment variables. API keys. Making sure I'm not hardcoding secrets. This is VERY important: never put API keys in your code. Using AWS CLI to set Lambda env vars instead.

Meanwhile: Toddler wants to play dolls. Right now. With my full attention. Husband is at work. I'm running on fumes.

Hour 6 to 8: DynamoDB Schema Mismatch

Finally got SerpAPI working with Google Jobs. Lambda was fetching jobs!

Error: Missing the key job_id in the item

My code was using 'id' but DynamoDB expected 'job_id'. Had to update every reference in the code, repackage the Lambda zip, redeploy.

Then the dependencies got wiped out. Had to reinstall feedparser and requests. Repackage. Redeploy.

Then it happened again because I kept forgetting to include the dependencies in the zip.

Three. Separate. Times.

YAY ME AGAIN.

Hour 8 to 9: Testing and Filtering

First test run: Got 4 job emails.

Job 1: Lead Software Engineer, DevOps. Me: I'm not senior. Rejected.

Job 2: Expert DevOps Engineer. Me: I'm not an expert. Rejected.

Job 3: Senior Principal Cloud Engineer. Me: I'm not principal level. Rejected.

Job 4: DevOps Engineer, Chantilly, VA. Me: Looks perfect!

[Clicks link]

Job posting: "Clearance: Top Secret/SCI with Polygraph Required"

Me: Great.

The Clearance Problem

Here's the thing: Google Jobs only shows job snippets. The clearance requirements? Those are buried in the full job description on the company's website.

My Lambda function can't see them. It can only filter based on what Google returns.

So I'll still get false positives.

But you know what? It's still better than manually searching Indeed throughout the day while a toddler bosses me around. Now I can check my email at 7 AM, Ctrl+F "clearance" on each job, skip the ones that require active clearance, and apply to the rest.

10 minutes instead of half my day.

Hour 9 to 12: Deploy the Scheduler

Final step: Deploy the EventBridge scheduler so it runs daily at 7 AM EST.

aws cloudformation create-stack --stack-name job-alerts-scheduler --template-body file://infrastructure/04-scheduler.yaml --region us-east-1

Wait for it to complete.

Done.

IT'S ALIVE.

The Final Stats

What I built: 4 CloudFormation stacks, 1 Lambda function (Python, ~250 lines), 2 DynamoDB tables, 1 SNS topic, 1 EventBridge scheduler, smart filtering for location, seniority, and clearance keywords.

Cost: $0/month (all free tier)

Time invested: 12 hours (spread across one very long day)

Time saved per week: ~15+ hours

ROI: Break even after 1 week

What I Learned

1. Free tier limitations are real. SerpAPI's free tier doesn't support Indeed. Had to pivot to Google Jobs.

2. DynamoDB schema mismatches will destroy you. 'id' vs 'job_id' cost me 30 minutes and three redeployments.

3. You can't filter what you can't see. Google Jobs snippets don't include clearance requirements. False positives will happen.

4. Environment variables over hardcoding secrets. Use aws lambda update-function-configuration to set env vars. Never put API keys in code. This is VERY important.

5. Dependencies in Lambda packages are easy to forget. If your zip is 7KB instead of 1.3MB, you forgot to include feedparser and requests. Ask me how I know.

6. Testing in production is real. Sometimes you just have to deploy it and see what breaks. Then fix it. Then redeploy. Three times.

Was It Worth It?

Honestly? Yes.

I spent 12 hours building this, but now I can spend mornings studying AWS instead of job hunting. I get fresh jobs delivered to my inbox daily. I don't miss postings because I'm too exhausted to search. My toddler gets more attention during the day. I don't have to context switch between "job hunting mode" and "mom mode" fifty times a day.

And most importantly, I proved to myself (and future employers) that I can build production ready AWS infrastructure. I have a portfolio project to talk about in interviews. I actually understand Lambda, DynamoDB, SNS, and EventBridge now, not just theoretically, but from debugging real problems at 6 PM on a Thursday.

The Irony

I built a job searcher to find a cloud engineering job.

The job searcher itself is a cloud engineering project.

Which means if I don't get hired, at least I got AWS hands on experience out of it.

And honestly? That's worth $0/month and 12 hours of my time.

What's Next

Tomorrow morning, I'll wake up to my first automated job alert email. Maybe it'll have 2 jobs. Maybe 10. Maybe they'll all require clearance I don't have.

But I won't have spent half my day finding that out.

I'll have spent 10 minutes.

And the rest? I'll be studying for my AWS Solutions Architect Associate certification, which I'm retaking on January 16th.

Because I'm 13 points away from passing.

And I don't have time to waste job hunting manually anymore.

Testing Updates

Day 2: Woke up excited for my first email. Nothing. Checked the logs and found 27 jobs had been processed, but my Python code was rejecting anything with "ability to obtain" clearance, even though those jobs don't require active clearance. Had to update the filter logic, repackage the Lambda zip, and redeploy. Again.

Day 3: Got 3 jobs in my email. Progress! Clicked the first one and got a 404. The job posting had been removed. Expected, but still frustrating. Second job was on ClearanceJobs, which requires creating an account before you can even see the full posting. Pass. Third job? Applied. One actual application out of three results. That's still better than spending hours searching manually.

Week 2: Senior level positions started slipping through the filters. Then intern postings. Edited the function to tighten the seniority filters and exclude entry-level internships. Repackaged. Redeployed.

Haven't gotten an email since.

Either the filters are now too strict, or the DC Metro area really doesn't have that many cloud engineering jobs without clearance requirements. Probably both.

Phase 2: Testing and Building a Real App

Right now, this is running on my laptop. For the next 2 weeks, I'm testing it to see how many jobs come through daily, how accurate the filters are, and what adjustments I need to make.

Once I'm confident it works, Phase 2 kicks in: Build a React dashboard to visualize job data, track application status (Applied, Interviewing, Rejected, Offer), add charts and analytics, deploy the frontend (probably Streamlit or React), and push everything to GitHub as a portfolio piece.

But first: Let it run. Collect data. Pass my AWS cert on January 16th.

Then: Build the app properly and add it to my portfolio.

Tech Stack (For the Nerds)

(And yes, I'm a loud and proud nerd: anime, manga, books, the whole package.)

Language: Python 3.11
Infrastructure: CloudFormation (IaC)
Compute: AWS Lambda (serverless)
Storage: DynamoDB (NoSQL, with TTL for auto cleanup)
Notifications: SNS (email)
Scheduling: EventBridge (cron: 7 AM EST daily)
API: SerpAPI (Google Jobs engine, free tier)
Cost: $0/month

Phase 2 (Coming Soon): React or Streamlit dashboard, Application tracking, Data visualization

GitHub: Not committed yet, testing locally for 2 weeks first

Final Thoughts

If you're unemployed, job hunting is a full time job. But it doesn't have to be manual labor that eats your entire day between potty training and playtime.

Automate what you can. Build tools that solve real problems. Use that time to upskill.

And if you're a hiring manager reading this: Hi. I build things that solve real problems. I debug production issues at 6 PM while my toddler demands I play princesses. I don't give up when APIs don't work, I pivot to Google Jobs and make it work anyway.

I'm looking for a cloud/DevOps role in Northern Virginia. No active clearance required.

Let's talk.


Written at 6:30 PM on a Thursday while my toddler watches Bluey and my husband works the closing shift. We're counting every dollar. But we have job alerts at 7 AM tomorrow. That counts for something.

Want to see my other AWS projects? Check out my portfolio or connect with me on LinkedIn.

Back to Portfolio
Hyper Icon