Applied AI Engineer (JavaScript, Intermediate to Senior, Remote in Canada)

SimpliCity

Get hot jobs first on Telegram

New positions appear faster in our channel

Location
Vancouver, Canada
Job Type
full-time
Work Format
🌍 Remote
Salary
$50/hr – $65/hr
Posted
September 13, 2026

Job Description

Hiya! We’re, a Vancouver-based GovTech startup building technology with purpose. Our core product is a composable content management system (CMS) that unifies municipal digital services, transforming a municipality’s website from a static library into a connected "front door" for the community. We are a small but mighty team that values diversity, curiosity, and the drive to continuously learn and improve.

The Opportunity

Moving a municipality onto our platform means converting thousands of web pages, documents, and images into structured content, and today most of that work is done by hand. We are hiring an Applied AI Engineer for a six-month project to change that. You will design and build an AI and automation pipeline that reads a client’s existing website content, interprets and classifies it, generates accurate metadata, and maps it into structured records and machine-readable JSON, with validation of output quality at scale.

This is a hands-on applied engineering role, not a research one. You will work directly with our CTO, Ian Sim, who directs the architecture, alongside our fullstack engineer and our QA/content specialist. The automation pipeline will be proven on real municipal website migrations under real deadlines, and the goal at the end of the project is a repeatable pipeline that any of our team members can run.

What You’ll Build

  • Reusable migration scaffolding: A single, repeatable structure for migration tracking, content inventory, and site scraping that works across all municipalities.
  • AI generation for templated records: News, events, meetings, facilities, bylaws, and contacts, which together make up roughly half of a municipality’s content by volume.
  • AI mapping to content models: Converting unstructured and semi-structured source material into structured records that conform to a defined schema. The mapping is not deterministic, and each client layers its own rules and vocabulary on top, so this is the hardest and most interesting part of the project.
  • Validation at scale: Tooling that confirms AI output quality quickly, so quality checking keeps pace with volume.
  • An MCP server: Making the pipeline’s capabilities reachable in a standard way (Model Context Protocol) by AI assistants, our platform, and downstream systems.
  • Internal application: Build an internal tool that takes advantage of the MCP and pipeline for any SimpliCity staff member to be able to migrate content themselves.

Our Tech Stack

We don’t expect you to be a master of everything on day one, but you should be comfortable (or excited to become very skilled) in:

  • AI: LLM APIs and coding agents, prompt and context engineering, model selection and fine-tuning, structured output with JSON schemas, and evaluating output quality. We currently use Claude Code as a team but it may make sense to explore other frontier models, or open source ones, or all the above.
  • Platform: JavaScript (Node.js), ReactJS, REST APIs, composable/headless CMS architecture, and Microsoft Azure (Canadian cloud-hosted).
  • Data: Unstructured and semi-structured web content, HTML and document parsing, content classification, and metadata extraction.
  • Tools: Git (Bitbucket & GitHub), Jira, Slack, Notion, and Microsoft 365/OneDrive.

What We’re Looking For

  • An applied AI builder with 3+ years of software engineering experience: You have shipped real software, and you have built things with LLMs beyond chat: pipelines, agents, extraction or classification systems, or evaluation harnesses.
  • A strong JavaScript engineer: You bring strong JavaScript and Node.js expertise, since the pipeline and its tooling are built in JavaScript, from command-line scripts to web utilities.
  • An engineer who ships tools, not demos: You know the difference between a supervised script that works on one machine and a repeatable tool a teammate can run without you, and you build for that last case.
  • A pragmatist about model quality: You measure output quality instead of eyeballing it, and you know when to reach for prompting, fine-tuning, or plain deterministic code.
  • Comfortable with messy source data: Real municipal websites are inconsistent. You are not put off by tangled HTML, scanned PDFs, and content that follows no schema.
  • A collaborative problem-solver: You work closely with our CTO, engineers, QA/content specialist, and other team members to make technical recommendations. You are comfortable working autonomously but know when to sync with the team when clarity and support is needed.
  • A responsible AI collaborator: You are effective at specifying and communicating with AI tools like Claude Code or others. Crucially, you know how to work without AI and use your best judgment to determine when human intervention and planning are needed. You see AI as a way to help solve real problems rather than just letting it run wild.

Education & Certifications

  • Academic foundation: University degree or diploma in Computer Science, Engineering, or a related field (or equivalent practical experience).
  • Continuous learning: Applied AI moves fast, and you stay current with models, tooling, and techniques, and you enjoy sharing what you learn with the team.

Why Join Us?

  • 4-day workweek and flexibility: Our team typically works Mondays to Thursdays. We provide a flexible work environment where you can shift your hours for an appointment, swap a workday when needed, or balance caretaking and life commitments.
    • Note: because this is a set project timeframe with specific deliverables, you may need to work some half days on Fridays or an extra hour each day Mon-Thurs on some weeks.
  • Remote-first: Work from anywhere in Canada. If you're in Vancouver, we’d love to get together for the occasional coffee or tea, meal, or working session.
  • Real-world impact: You aren’t just moving tickets; you’re contributing to building digital infrastructure that helps Canadian communities thrive.
  • Inclusive in every way: We value diversity in all forms: cultures, ages, sexualities, gender identities, neurotypes, and life experiences. We believe that a team with a wide range of thoughts and perspectives builds better products for the diverse communities we serve. We all contribute to creating an environment where everyone feels respected, included, and empowered to bring their whole, authentic self to work. We particularly encourage women and members of other underrepresented groups in tech to apply. 
  • No drama and no tech-bro culture: We hire for potential and ‘good human’ vibes. We treat everyone as autonomous professionals where we value collaboration when it’s needed, but we also trust you to simply get on with your work. Our culture is built on mutual respect for the unique skills each person brings to the table. 

Hiring Timeline and Rate

We are looking to hire quickly, therefore this posting will be taken down around 5pm PT on Sun September 13, 2026. We plan to run interviews the week of September 14, and make an offer asap for a start date of October 1, 2026.

We are hiring a term employee for an initial period of 6 months. This position may be extended and/or turned into a permanent role depending on how our company grows and in your interest in continuing to work with us.

You will work full-time of 32 to 36 hours per week within our typical team schedule of Mon-Thurs (some half day Fridays if needed), anywhere between 8am-7pm PT. If you are working outside BC, we need the majority of your daily hours to overlap with our team time. You can choose which hours within that window work best for you, and some hours outside the core window are also doable.

We are a fully remote team working within Canada (sorry, candidates physically located outside of Canada will not be considered).

Our budget for this role is within the $50/hr to $65/hr range, depending on your skills and strength of your experience.

How to Get Our Attention

If you’ve managed to read this far, then chances are you’d love working here (and you appreciate more detail over less!). So as a bonus, we wanted to share some tips with you when applying, because yes, our CEO, , reads every application. To move to the top of the pile:

  1. Show your style: In your summary or cover note, tell us why our mission resonates with you. If you have built a workflow or managed a project you are proud of, tell us about it. We would also love to hear what keeps you curious outside of work, whether it is a passion project or your ideal Friday off.
  2. Give us the real resume: We prefer longer, chronological resumes, and career changes or gaps are fine by us (life is often life-ing, right?). We value context and honesty. We want to understand what you actually accomplished, what you learned, how you performed both individually and as a collaborator, and how your experience makes you ready to grow with us.
    • Please also make sure to clearly indicate your role, start and end dates (month + year), company name, location (City/Province if in Canada; or City/Country if abroad – and yes we do hire folks with international experience outside of Canada), and your education including the same dates and location format as with roles.

--

FYI SimpliCity was spun out from our sister company Radical I/O in 2022. While we operate as a dedicated startup team focused on our composable CMS platform, we share a centralized recruitment platform (and founding team) with Radical I/O.

 

🎯 Who is this job for?

This role is suitable for a Middle to Senior Applied AI Engineer with at least three years of software engineering experience, strong JavaScript and Node.js skills, and practical experience building LLM-powered pipelines, agents, extraction, classification, or evaluation systems.

The candidate should be skilled in LLM APIs, prompt and context engineering, structured JSON output, model evaluation, web and document parsing, REST APIs, React, Azure, and composable CMS architectures, with an ability to work confidently with messy unstructured data.

They should be familiar with designing repeatable automation tools, mapping content to schemas, generating and validating metadata, building MCP servers and internal applications, and collaborating autonomously with technical and content-focused teams.

💬 Potential Interview Questions

How would you design a repeatable Node.js pipeline for migrating content from different municipal websites?

I would separate the pipeline into configurable stages for discovery, scraping, parsing, classification, transformation, validation, and export. Each municipality would have its own configuration for selectors, vocabularies, schemas, and rules, while shared tooling would handle logging, retries, checkpoints, and migration tracking.

How would you extract reliable structured data from inconsistent HTML, scanned PDFs, and semi-structured documents?

I would combine deterministic parsers with document extraction and OCR where necessary, preserving source text and provenance for every extracted field. The pipeline should normalize formats, identify low-confidence results, and route ambiguous or incomplete records for review rather than silently producing incorrect data.

How would you use an LLM to map unstructured municipal content into a defined JSON schema?

I would provide the model with the relevant source content, schema definitions, field descriptions, client-specific vocabulary, and clear transformation rules. Structured output constrained by a JSON schema would be followed by programmatic validation and, where appropriate, a second review or correction pass.

How would you evaluate the quality of AI-generated classifications and metadata at scale?

I would create a representative, human-reviewed evaluation set and measure field-level accuracy, completeness, validity, and classification precision and recall. Results should be tracked by content type and model or prompt version, with regression tests run whenever prompts, schemas, or models change.

When would you use deterministic code instead of an LLM in this migration pipeline?

I would use deterministic logic for predictable tasks such as date normalization, URL handling, duplicate detection, schema validation, and known HTML patterns. I would use an LLM for ambiguous interpretation, semantic classification, and mapping content where rules cannot reliably capture the source variations.

How would you handle invalid, incomplete, or hallucinated JSON returned by an LLM API?

I would enforce structured responses where supported, validate every response against a JSON Schema, and reject or repair invalid output through controlled retries. The system should preserve the original response, record validation errors, apply confidence thresholds, and escalate unresolved cases to human review.

What design considerations are important when exposing the migration pipeline through an MCP server?

The MCP server should expose narrowly scoped, well-documented tools with typed inputs, predictable outputs, and clear error handling. It should enforce authentication and authorization, validate tool arguments, prevent unsafe arbitrary actions, and provide operation status and audit information for long-running migrations.

How would you make the migration process safe to stop and resume?

I would persist job state, source identifiers, intermediate results, validation status, and output references so each stage can be resumed independently. Idempotent operations, stable record keys, checkpoints, retry policies, and dead-letter handling would prevent duplicated or lost content after failures.

How would you build an internal React application that allows staff to run migrations without engineering assistance?

I would provide guided workflows for configuring a source, previewing discovered content, reviewing low-confidence mappings, starting jobs, and monitoring progress. The interface should surface validation failures and provenance clearly, while the backend remains responsible for authorization, orchestration, logging, and reliable execution.

How would you protect municipal or potentially sensitive content when using external AI models?

I would classify the data, minimize what is sent to a model, avoid including unnecessary personal information, and use approved Azure or vendor configurations with appropriate retention and residency controls. Secrets should be managed securely, access should be role-based, and prompts, outputs, and migration actions should be auditable.

📋 Job Summary

SimpliCity is a Vancouver-based GovTech startup building a composable CMS that helps Canadian municipalities deliver connected digital services. As an Applied AI Engineer, you’ll build reusable JavaScript/Node.js pipelines to scrape, classify, transform, and validate messy web content, develop an MCP server and internal migration tools, and work with LLM APIs, React, REST, Azure, and JSON schemas. This is a fully remote-in-Canada, six-month term role for 32–36 hours per week, paying $50–$65/hour. Apply for the four-day-week flexibility, real-world civic impact, collaborative low-drama culture, and opportunity to shape practical AI infrastructure from the ground up.

Required Skills

JavaScript Node.js ReactJS Azure LLM Git APIs HTML

Never miss a JavaScript opportunity

Subscribe to get similar jobs and weekly insights delivered to your inbox

Hiring JavaScript developers?

Post your job to 8,600+ registered developers. Starting free.

See Pricing

Related jobs

Denver, Colorado, United States

Junior Frontend Developer (React)

Tek4Real

Full-time

Is this your listing? Claim or request removal