Opportunities & Applications
Organize opportunities, companies, job descriptions, application stages, status and the overall application lifecycle.
Simple by Design. Secure by Default.
A secure, cloud-native application created from a real-world need to bring opportunities, relationships, career documents and job-search activities into one structured system.
Job Search Manager began with a problem I experienced personally while managing an active and increasingly complex job search.
Applying for a serious opportunity involved much more than finding a job and submitting a resume. Each role required reviewing the Job Description, assessing how well my experience matched, evaluating ATS alignment, identifying relevant skills and keywords, customizing the resume where appropriate, and tracking exactly which resume version was submitted.
At the same time, I needed to manage opportunities from different channels, recruiter and professional contacts, application status, interviews, follow-ups, job descriptions, resumes and supporting documents. The workflow quickly became fragmented across spreadsheets, job portals, documents, email, LinkedIn and other channels.
Rather than continuing to adapt my workflow around disconnected tools, I decided to design and build a purpose-built system. What began as a resume-management idea evolved into an end-to-end Job Search Manager.
The goal was not to over-engineer the solution. Simplicity would never come at the expense of security, privacy, maintainability or engineering discipline.
Simple by Design. Secure by Default.
A single structured system supporting the broader job-search lifecycle rather than one isolated task.
Organize opportunities, companies, job descriptions, application stages, status and the overall application lifecycle.
Bring recruiters, hiring contacts, professional connections, interactions and follow-up context into the same workflow.
Maintain career assets, resume versions and supporting documents so the right material can be associated with the right opportunity.
Keep the job description and application context connected, supporting a structured approach to evaluating and preparing for opportunities.
Keep interview and follow-up activity connected to the broader opportunity journey rather than scattered across separate notes and channels.
Create a consolidated view of job-search activity and pipeline information to make the overall process easier to understand and manage.
Support controlled administration and user-management capabilities with protected privileged operations and ownership rules.
Apply authenticated access, role-aware authorization, session controls and protected API boundaries across the application.
The product is organized around the journey of the job seeker—not around a collection of disconnected software modules.
Deeper ATS analysis, resume editing and customization, job feeds and matching, and mock interview/coaching capabilities are treated as product evolution—not presented here as completed production capabilities.
The architecture was selected to fit the problem: secure, maintainable, cost-conscious and scalable enough for its purpose without unnecessary infrastructure.
Privileged operations are mediated through the backend/API layer rather than giving the browser direct privileged access to data and storage resources.
D1 holds structured application records while R2 handles file/object storage—using each service for the type of data it is designed to manage.
The design deliberately avoids infrastructure that does not add meaningful value to the problem, reducing operational burden without removing necessary controls.
The application handles personal career information and documents. Appropriate controls were therefore considered across identity, sessions, authorization, APIs, data, development and deployment.
Privileged administrative access requires stronger authentication, applying a simple principle: higher privilege requires stronger identity assurance.
Authenticated sessions are subject to server-side timeout controls so unattended access does not remain available indefinitely.
Role and privilege controls are enforced by the backend rather than relying only on what the browser chooses to display.
Application data and files sit behind controlled application/API boundaries instead of being exposed as directly privileged browser resources.
Authentication controls • authorization checks • ownership validation • protected APIs • session handling • privileged-access safeguards • data boundaries • AI guardrails • code review • Git change control
The stack was selected around security, simplicity, maintainability, cost efficiency and the ability to evolve—not around collecting technologies.
Responsive application UI and modern local development workflow.
Protected server-side API, business logic and security enforcement.
Relational storage for structured application records.
Separate storage boundary for documents and file assets.
Local Worker runtime, bindings, configuration, migrations and deployment workflow.
Development, dependency and application build tooling.
Branching, traceability, known-good checkpoints and controlled integration.
UI, network/API, authentication, cookie and integration troubleshooting.
The frontend, backend/API, database migrations and service bindings were exercised through a local development workflow designed to represent the deployed architecture as closely as practical.
Git was used as an engineering control—not simply as a place to store finished code.
Meaningful capabilities and changes were isolated in dedicated branches so development could progress without immediately putting the stable baseline at risk.
Commits were used to preserve validated states, providing traceability, recoverability and safe points before moving to the next task.
Changes moved toward the stable branch after implementation, local validation, review and correction rather than through uncontrolled large-scale edits.
AI accelerated implementation, exploration, troubleshooting and review, but generated output was not automatically treated as production-ready.
“AI can accelerate development. Engineering discipline provides the control.”
Used substantially for larger implementation and code-generation tasks within defined requirements and task boundaries.
Used for requirements refinement, architecture discussions, implementation planning, debugging, change review, security reasoning and iterative refinement.
AI capabilities were designed to operate within the application's existing security and engineering boundaries—not as a shortcut around them. AI-related access remains subject to authenticated application flows, server-side controls and defined task boundaries, while consequential decisions remain with the user.
AI is a capability—not a trust boundary. Authentication, authorization, data boundaries and application controls continue to govern how AI-enabled functionality is accessed and used.
Review looked beyond whether a page loaded. Changes were challenged for correctness, architecture, security, scope and regression risk.
Validate expected workflows, behavior and whether the implementation actually solves the defined task.
Check separation of concerns, service boundaries, unnecessary complexity and architecture drift.
Review authentication, authorization, privileged operations, session behavior, ownership and protected APIs.
Look for unintended file changes, broken existing behavior and side effects outside the intended scope.
Review principle: Verify not only what changed—but also what should not have changed.
Testing was incremental and layered, covering application behavior, integration, authentication/authorization and security-control outcomes.
Confirm that authorized users and valid workflows behave as expected.
Confirm that unauthenticated, insufficiently privileged or expired access is denied where it should be.
Development included resolving practical issues involving CORS, authentication state, session cookies, protected routes, API authorization, migrations and deployment behavior.
The objective was not process for the sake of process. Each control created a safer boundary around rapid, AI-assisted development.
The achievement is not only the application itself—it is the complete journey from identifying a real problem to designing, securing, reviewing, testing and deploying a working solution.
Started with a real operational problem and expanded the scope only when the broader lifecycle made the need clear.
Selected a pragmatic cloud architecture that balanced security, simplicity, maintainability and cost.
Treated identity, privileged access, sessions, authorization and data boundaries as design requirements rather than late additions.
Used local environments, task-based branching, reviews, testing, known-good checkpoints and controlled integration around AI-assisted development.
The roadmap extends the same end-to-end job-search vision with deeper intelligence and assistance while preserving the principles established in the first production foundation.
Built to solve a problem I experienced firsthand—and developed as a practical exercise in product thinking, secure architecture, modern cloud engineering, disciplined change control and responsible AI-assisted development.