[{"data":1,"prerenderedAt":596},["ShallowReactive",2],{"navigation":3,"content-tags:articles":146,"tag-saas":434},[4],{"title":5,"path":6,"stem":7,"children":8,"page":145},"Articles","\u002Farticles","articles",[9,13,17,21,25,29,33,37,41,45,49,53,57,61,65,69,73,77,81,85,89,93,97,101,105,109,113,117,121,125,129,133,137,141],{"title":10,"path":11,"stem":12},"Building a Claude Code Plugin with Hooks","\u002Farticles\u002F2026-01-04-building-claude-code-plugin-with-hooks","articles\u002F2026-01-04-building-claude-code-plugin-with-hooks",{"title":14,"path":15,"stem":16},"Where should I validate? Everywhere, and for different reasons","\u002Farticles\u002F2026-04-18-validation-across-the-stack","articles\u002F2026-04-18-validation-across-the-stack",{"title":18,"path":19,"stem":20},"Error handling across the stack","\u002Farticles\u002F2026-04-23-error-handling-across-the-stack","articles\u002F2026-04-23-error-handling-across-the-stack",{"title":22,"path":23,"stem":24},"3 Ways to Run NestJS Cron Jobs When Running Multiple Instances","\u002Farticles\u002F3-ways-to-run-nestjs-cron-jobs-when-running-multiple-instances","articles\u002F3-ways-to-run-nestjs-cron-jobs-when-running-multiple-instances",{"title":26,"path":27,"stem":28},"Building a Custom Content Slider (Carousel) in Angular","\u002Farticles\u002Fbuilding-a-custom-content-slider-carousel-in-angular","articles\u002Fbuilding-a-custom-content-slider-carousel-in-angular",{"title":30,"path":31,"stem":32},"Building Jobven: Designing a Developer-Friendly API","\u002Farticles\u002Fbuilding-jobven-designing-a-developer-friendly-api","articles\u002Fbuilding-jobven-designing-a-developer-friendly-api",{"title":34,"path":35,"stem":36},"Building MapleStack: AWS S3 for Data Storage","\u002Farticles\u002Fbuilding-maplestack-aws-s3-for-data-storage","articles\u002Fbuilding-maplestack-aws-s3-for-data-storage",{"title":38,"path":39,"stem":40},"Building MapleStack: Enhancing Email Capabilities with Mailgun","\u002Farticles\u002Fbuilding-maplestack-enhancing-email-capabilities-with-mailgun","articles\u002Fbuilding-maplestack-enhancing-email-capabilities-with-mailgun",{"title":42,"path":43,"stem":44},"Building MapleStack: NestJS for Server-Side Operations","\u002Farticles\u002Fbuilding-maplestack-nestjs-for-server-side-operations","articles\u002Fbuilding-maplestack-nestjs-for-server-side-operations",{"title":46,"path":47,"stem":48},"Building MapleStack: PostgreSQL for Data Storage","\u002Farticles\u002Fbuilding-maplestack-postgresql-for-data-storage","articles\u002Fbuilding-maplestack-postgresql-for-data-storage",{"title":50,"path":51,"stem":52},"Building MapleStack: React for an interactive user interface","\u002Farticles\u002Fbuilding-maplestack-react-for-an-interactive-user-interface","articles\u002Fbuilding-maplestack-react-for-an-interactive-user-interface",{"title":54,"path":55,"stem":56},"Building MapleStack: Securing Connections with Let's Encrypt","\u002Farticles\u002Fbuilding-maplestack-securing-connections-with-lets-encrypt","articles\u002Fbuilding-maplestack-securing-connections-with-lets-encrypt",{"title":58,"path":59,"stem":60},"Building MapleStack: Simplifying User Authorization with AWS Cognito","\u002Farticles\u002Fbuilding-maplestack-simplifying-user-authorization-with-aws-cognito","articles\u002Fbuilding-maplestack-simplifying-user-authorization-with-aws-cognito",{"title":62,"path":63,"stem":64},"Building MapleStack: Tailwind CSS for Streamlined Styling","\u002Farticles\u002Fbuilding-maplestack-tailwind-css-for-streamlined-styling","articles\u002Fbuilding-maplestack-tailwind-css-for-streamlined-styling",{"title":66,"path":67,"stem":68},"Debugging Multiple NestJS Applications in VSCode","\u002Farticles\u002Fdebugging-multiple-nestjs-applications-in-vscode","articles\u002Fdebugging-multiple-nestjs-applications-in-vscode",{"title":70,"path":71,"stem":72},"Enums as arrays in PostgreSQL - Updated 2024","\u002Farticles\u002Fenums-as-arrays-in-postgresql","articles\u002Fenums-as-arrays-in-postgresql",{"title":74,"path":75,"stem":76},"FindChildcare.ca","\u002Farticles\u002Ffindchildcare-ca","articles\u002Ffindchildcare-ca",{"title":78,"path":79,"stem":80},"GraphQL Server - Apollo, KoaJS and Typescript implementation","\u002Farticles\u002Fgraphql-server-apollo-koajs-and-typescript-implementation","articles\u002Fgraphql-server-apollo-koajs-and-typescript-implementation",{"title":82,"path":83,"stem":84},"How I built MapleStack's waitlist with AI: ChatGPT vs Bard","\u002Farticles\u002Fhow-i-built-maplestacks-waitlist-with-ai-chatgpt-vs-bard","articles\u002Fhow-i-built-maplestacks-waitlist-with-ai-chatgpt-vs-bard",{"title":86,"path":87,"stem":88},"How to Integrate Google reCAPTCHA v3 with NestJS in 3 Easy Steps","\u002Farticles\u002Fhow-to-integrate-google-recaptcha-v3-with-nestjs-in-3-easy-steps","articles\u002Fhow-to-integrate-google-recaptcha-v3-with-nestjs-in-3-easy-steps",{"title":90,"path":91,"stem":92},"How to resolve a blacklisted domain","\u002Farticles\u002Fhow-to-resolve-a-blacklisted-domain","articles\u002Fhow-to-resolve-a-blacklisted-domain",{"title":94,"path":95,"stem":96},"Implementing WordPress-like Tags in Nuxt Content","\u002Farticles\u002Fimplementing-wordpress-like-tags-in-nuxt","articles\u002Fimplementing-wordpress-like-tags-in-nuxt",{"title":98,"path":99,"stem":100},"Jobven","\u002Farticles\u002Fjobven","articles\u002Fjobven",{"title":102,"path":103,"stem":104},"KidzLog","\u002Farticles\u002Fkidzlog","articles\u002Fkidzlog",{"title":106,"path":107,"stem":108},"MapleStack","\u002Farticles\u002Fmaplestack","articles\u002Fmaplestack",{"title":110,"path":111,"stem":112},"Migrating from WordPress to Nuxt","\u002Farticles\u002Fmigrating-from-wordpress-to-nuxt","articles\u002Fmigrating-from-wordpress-to-nuxt",{"title":114,"path":115,"stem":116},"My Initial Server Setup Checklist","\u002Farticles\u002Fmy-initial-server-setup-checklist","articles\u002Fmy-initial-server-setup-checklist",{"title":118,"path":119,"stem":120},"Pre-authorized transaction on the Stellar network","\u002Farticles\u002Fpre-authorized-transaction-on-the-stellar-network","articles\u002Fpre-authorized-transaction-on-the-stellar-network",{"title":122,"path":123,"stem":124},"Saza: Open Source mobile and desktop Stellar wallet release.","\u002Farticles\u002Fsaza-open-source-mobile-and-desktop-stellar-wallet-release","articles\u002Fsaza-open-source-mobile-and-desktop-stellar-wallet-release",{"title":126,"path":127,"stem":128},"SpellCheckMySite.com","\u002Farticles\u002Fspellcheckmysite-com","articles\u002Fspellcheckmysite-com",{"title":130,"path":131,"stem":132},"Using Check Constraints in PostgreSQL for Value Validation","\u002Farticles\u002Fusing-check-constraints-in-postgresql-for-value-validation","articles\u002Fusing-check-constraints-in-postgresql-for-value-validation",{"title":134,"path":135,"stem":136},"Using DataLoader in GraphQL","\u002Farticles\u002Fusing-dataloader-in-graphql","articles\u002Fusing-dataloader-in-graphql",{"title":138,"path":139,"stem":140},"Using Typescript in NodeJS development","\u002Farticles\u002Fusing-typescript-in-nodejs-development","articles\u002Fusing-typescript-in-nodejs-development",{"title":142,"path":143,"stem":144},"Welcome!","\u002Farticles\u002Fwelcome","articles\u002Fwelcome",false,[147,158,168,177,185,195,203,212,221,229,237,245,253,261,270,280,288,296,304,312,320,329,337,345,353,361,369,378,386,394,402,410,418,426],{"id":148,"color":149,"description":150,"extension":151,"meta":152,"name":153,"slug":154,"stem":155,"__hash__":156,"count":157},"tags\u002Ftags\u002Fai.yml","purple","Artificial Intelligence and machine learning topics","yml",{},"AI","ai","tags\u002Fai","3Kbwn1GafRMDqK3ErYiBohkqyMbs4y-gmPA5L0htrtI",2,{"id":159,"color":160,"description":161,"extension":151,"meta":162,"name":163,"slug":164,"stem":165,"__hash__":166,"count":167},"tags\u002Ftags\u002Fangular.yml","red","Angular framework tutorials and component development",{},"Angular","angular","tags\u002Fangular","4JdHB81zNrypA0P8D8gi97pj0Ds9E3_IW7YbLvnzs1k",1,{"id":169,"color":170,"description":171,"extension":151,"meta":172,"name":173,"slug":174,"stem":175,"__hash__":176,"count":157},"tags\u002Ftags\u002Fapi.yml","blue","Designing, building and consuming web APIs",{},"API","api","tags\u002Fapi","A0x8MlouPoSEbat0Yj1-_xytY1yBgyVkGIlY-bTzPUM",{"id":178,"color":179,"description":180,"extension":151,"meta":181,"name":5,"slug":7,"stem":182,"__hash__":183,"count":184},"tags\u002Ftags\u002Farticles.yml","gray","General articles and blog posts",{},"tags\u002Farticles","iT5XsTSsj5v9-aLrtgHxDyk_QCYfK8mlea2vVyCdcZM",7,{"id":186,"color":187,"description":188,"extension":151,"meta":189,"name":190,"slug":191,"stem":192,"__hash__":193,"count":194},"tags\u002Ftags\u002Faws.yml","orange","Amazon Web Services cloud platform tutorials and integrations",{},"AWS","aws","tags\u002Faws","i2eOUxfMNR5PbOtUVc7VAbZk5Y7LupicySpVtJY24_A",3,{"id":196,"color":170,"description":197,"extension":151,"meta":198,"name":199,"slug":200,"stem":201,"__hash__":202,"count":167},"tags\u002Ftags\u002Fbard.yml","Google Bard AI assistant",{},"Bard","bard","tags\u002Fbard","uy9j-VgMeapYwgVu98-Df6yqWCXCAwfLn5j8Sb15ZmE",{"id":204,"color":160,"description":205,"extension":151,"meta":206,"name":207,"slug":208,"stem":209,"__hash__":210,"count":211},"tags\u002Ftags\u002Fbuilding-maplestack.yml","Series on building the MapleStack platform",{},"Building MapleStack","building-maplestack","tags\u002Fbuilding-maplestack","hIpKigdKwKbxd8aqva_KMKT-hpxpLDOCnQ9qoRGyjPg",8,{"id":213,"color":214,"description":215,"extension":151,"meta":216,"name":217,"slug":218,"stem":219,"__hash__":220,"count":167},"tags\u002Ftags\u002Fchatgpt.yml","green","OpenAI ChatGPT integration and usage",{},"ChatGPT","chatgpt","tags\u002Fchatgpt","32dptlACBGlEhrLxxih3XBVQeeqayyl3nUn4xrjh6mM",{"id":222,"color":149,"description":223,"extension":151,"meta":224,"name":225,"slug":226,"stem":227,"__hash__":228,"count":167},"tags\u002Ftags\u002Fclaude-code.yml","Building with and extending Anthropic",{},"Claude Code","claude-code","tags\u002Fclaude-code","YxSs-GYpeUzG-p5B9htEndC3aIrB3COkRkKzxd2SoTE",{"id":230,"color":187,"description":231,"extension":151,"meta":232,"name":233,"slug":234,"stem":235,"__hash__":236,"count":167},"tags\u002Ftags\u002Fdataloader.yml","DataLoader utility for batching and caching",{},"DataLoader","dataloader","tags\u002Fdataloader","LmXdDjUElkWFv52Zjjjs9iSl5ho6XzjgngiwhkAnlLk",{"id":238,"color":170,"description":239,"extension":151,"meta":240,"name":241,"slug":242,"stem":243,"__hash__":244,"count":167},"tags\u002Ftags\u002Fdns.yml","Domain Name System configuration and troubleshooting",{},"DNS","dns","tags\u002Fdns","-ouuVgZR4CIiCKyOp51RQoXCKDvhpBV0KMUf1zqLXNc",{"id":246,"color":170,"description":247,"extension":151,"meta":248,"name":249,"slug":250,"stem":251,"__hash__":252,"count":157},"tags\u002Ftags\u002Fengineering.yml","Software engineering practice, craft and technical decision making",{},"Engineering","engineering","tags\u002Fengineering","t3NT39qm9R9NCBT8lwSuG9cxZZZa4Xds-X7AINZw-3o",{"id":254,"color":160,"description":255,"extension":151,"meta":256,"name":257,"slug":258,"stem":259,"__hash__":260,"count":167},"tags\u002Ftags\u002Ferror-handling.yml","Handling, surfacing and recovering from failure across a stack",{},"Error Handling","error-handling","tags\u002Ferror-handling","jxCFis914HceisiNgt920hxUAe4KgCulUZGLzKcNspg",{"id":262,"color":263,"description":264,"extension":151,"meta":265,"name":266,"slug":267,"stem":268,"__hash__":269,"count":157},"tags\u002Ftags\u002Fgraphql.yml","pink","GraphQL API development, schema design, and implementation guides",{},"GraphQL","graphql","tags\u002Fgraphql","1wfWwIg4deU-5JedMVdkw9j9mualhUlJ1MZDgb6V7R0",{"id":271,"color":272,"description":273,"extension":151,"meta":274,"name":275,"slug":276,"stem":277,"__hash__":278,"count":279},"tags\u002Ftags\u002Fjavascript.yml","yellow","JavaScript programming language tutorials and best practices",{},"JavaScript","javascript","tags\u002Fjavascript","qZheXj7oAA3rukxJWCK5SLSe3-_mCwMq0OAi9BtEFRw",6,{"id":281,"color":179,"description":282,"extension":151,"meta":283,"name":284,"slug":285,"stem":286,"__hash__":287,"count":157},"tags\u002Ftags\u002Fkoajs.yml","Koa.js web framework for Node.js",{},"KoaJS","koajs","tags\u002Fkoajs","KVPDsU-wIMo46n6-bdbF-dRkiwlRbz3RJP7K9vSOrmQ",{"id":289,"color":214,"description":290,"extension":151,"meta":291,"name":292,"slug":293,"stem":294,"__hash__":295,"count":167},"tags\u002Ftags\u002Fletsencrypt.yml","Free SSL\u002FTLS certificates with Let's Encrypt",{},"Let's Encrypt","letsencrypt","tags\u002Fletsencrypt","0s8AZbiIKoWGwiCNeWEc_OIo3aDAJlkSB5fjQlgcGNk",{"id":297,"color":179,"description":298,"extension":151,"meta":299,"name":300,"slug":301,"stem":302,"__hash__":303,"count":167},"tags\u002Ftags\u002Flinux.yml","Linux server administration and command-line tools",{},"Linux","linux","tags\u002Flinux","YmvWMX2B2AdXzWfUycxqXt4m9jSgpLE8q7eW6FeiJPk",{"id":305,"color":160,"description":306,"extension":151,"meta":307,"name":106,"slug":308,"stem":309,"__hash__":310,"count":311},"tags\u002Ftags\u002Fmaplestack.yml","Building MapleStack job board platform",{},"maplestack","tags\u002Fmaplestack","v2dZpc6OuxQeK2KTQIC3RYfv4FwNzIAa0VDTzLjWjAA",9,{"id":313,"color":187,"description":314,"extension":151,"meta":315,"name":316,"slug":317,"stem":318,"__hash__":319,"count":167},"tags\u002Ftags\u002Fmigration.yml","Platform and data migration guides",{},"Migration","migration","tags\u002Fmigration","scw_ZTGUersSET1o4l_NAkZ3cDKiplB53LqtFRvE7Yc",{"id":321,"color":160,"description":322,"extension":151,"meta":323,"name":324,"slug":325,"stem":326,"__hash__":327,"count":328},"tags\u002Ftags\u002Fnestjs.yml","Articles about NestJS framework for building efficient, scalable Node.js server-side applications",{},"NestJS","nestjs","tags\u002Fnestjs","GQFi18GrTd6pSmws7rOsyKTbLATtQwywfsZpQwhCsI0",4,{"id":330,"color":214,"description":331,"extension":151,"meta":332,"name":333,"slug":334,"stem":335,"__hash__":336,"count":194},"tags\u002Ftags\u002Fnodejs.yml","Node.js runtime environment and server-side JavaScript",{},"Node.js","nodejs","tags\u002Fnodejs","lusY1Ii4Hd3O6gLdY2NbhHchd3YAT_Q1QOm0BqrfY_4",{"id":338,"color":214,"description":339,"extension":151,"meta":340,"name":341,"slug":342,"stem":343,"__hash__":344,"count":194},"tags\u002Ftags\u002Fnuxt.yml","Nuxt.js framework for Vue.js applications",{},"Nuxt","nuxt","tags\u002Fnuxt","QwQk7HOatKzP3xW3-ie3L7_OJ7O8hbqCT2E8AUtrV2o",{"id":346,"color":187,"description":347,"extension":151,"meta":348,"name":349,"slug":350,"stem":351,"__hash__":352,"count":167},"tags\u002Ftags\u002Fplugins.yml","Extending tools and frameworks through plugin systems",{},"Plugins","plugins","tags\u002Fplugins","gShR9UaVAM-OLItdfQRg89U_mFSX53KgzFge6eQGSaE",{"id":354,"color":170,"description":355,"extension":151,"meta":356,"name":357,"slug":358,"stem":359,"__hash__":360,"count":194},"tags\u002Ftags\u002Fpostgresql.yml","PostgreSQL database tutorials, tips, and best practices",{},"PostgreSQL","postgresql","tags\u002Fpostgresql","o-29A3fv27MHMpunvcXvumOEdfKJJ_Wu6s_Wdej2ynI",{"id":362,"color":149,"description":363,"extension":151,"meta":364,"name":365,"slug":366,"stem":367,"__hash__":368,"count":211},"tags\u002Ftags\u002Fprojects.yml","Articles about personal and professional projects",{},"Projects","projects","tags\u002Fprojects","L834U-TbUh7RZkMdabAGEHgsgGb1hUWpWeIomHD81sE",{"id":370,"color":371,"description":372,"extension":151,"meta":373,"name":374,"slug":375,"stem":376,"__hash__":377,"count":157},"tags\u002Ftags\u002Freact.yml","cyan","React library guides for building user interfaces",{},"React","react","tags\u002Freact","Cl0931Ka3nLB6sYwUevYf3q--ugJfBakfGOEXDpY6Mw",{"id":379,"color":371,"description":380,"extension":151,"meta":381,"name":382,"slug":383,"stem":384,"__hash__":385,"count":167},"tags\u002Ftags\u002Fsaas.yml","Building and running software as a service products",{},"SaaS","saas","tags\u002Fsaas","74u9GtZbJ7IF37YdnFP6JagBgw0PblIZK2mc3r8bbew",{"id":387,"color":170,"description":388,"extension":151,"meta":389,"name":390,"slug":391,"stem":392,"__hash__":393,"count":167},"tags\u002Ftags\u002Fstellar.yml","Stellar blockchain network and cryptocurrency development",{},"Stellar","stellar","tags\u002Fstellar","H71kcSAHbcG_q3Y5cFkgonNN5uH5JxVsXlZjLaotbnk",{"id":395,"color":371,"description":396,"extension":151,"meta":397,"name":398,"slug":399,"stem":400,"__hash__":401,"count":167},"tags\u002Ftags\u002Ftailwindcss.yml","Tailwind CSS utility-first styling framework",{},"Tailwind CSS","tailwindcss","tags\u002Ftailwindcss","_Q7hBntSUWoSWUcYMwmpz1kfCE7RVlSTR9U86k3av_g",{"id":403,"color":170,"description":404,"extension":151,"meta":405,"name":406,"slug":407,"stem":408,"__hash__":409,"count":184},"tags\u002Ftags\u002Ftypescript.yml","TypeScript language features, type safety, and development tips",{},"TypeScript","typescript","tags\u002Ftypescript","zv13aSlv3NhTqdsNRYQ0pKjE5j8rZZk5zv2kD6guG4c",{"id":411,"color":214,"description":412,"extension":151,"meta":413,"name":414,"slug":415,"stem":416,"__hash__":417,"count":167},"tags\u002Ftags\u002Fvalidation.yml","Validating input and data at every layer of an application",{},"Validation","validation","tags\u002Fvalidation","Y2whDaQYOSOUCRjs2TcEedcEvVA8a2b3kq_-xULT3gY",{"id":419,"color":214,"description":420,"extension":151,"meta":421,"name":422,"slug":423,"stem":424,"__hash__":425,"count":167},"tags\u002Ftags\u002Fvps.yml","Virtual Private Server setup and management",{},"VPS","vps","tags\u002Fvps","SOzIPECxOX5g_l0rF3QhJEWwMnOeRe0htUuhWc62PXE",{"id":427,"color":170,"description":428,"extension":151,"meta":429,"name":430,"slug":431,"stem":432,"__hash__":433,"count":157},"tags\u002Ftags\u002Fwordpress.yml","WordPress CMS and related topics",{},"WordPress","wordpress","tags\u002Fwordpress","FiVBFOXCbR45_HKOqwcZAu9dDru5YOemYUcilPwarYQ",{"tag":435,"articles":437,"relatedTags":591},{"id":379,"color":371,"description":380,"extension":151,"meta":436,"name":382,"slug":383,"stem":384,"__hash__":385},{},[438],{"id":439,"title":98,"author":440,"body":444,"categories":579,"date":580,"description":581,"extension":582,"head":583,"image":584,"meta":585,"minRead":157,"navigation":586,"ogImage":583,"path":99,"robots":583,"schemaOrg":583,"seo":587,"sitemap":588,"stem":100,"tags":589,"__hash__":590},"articles\u002Farticles\u002Fjobven.md",{"name":441,"avatar":442},"Peter Oliha",{"src":443,"alt":441},"\u002Fassets\u002Fimages\u002Fauthors\u002Fpeter-oliha.jpg",{"type":445,"value":446,"toc":572},"minimark",[447,462,467,470,473,477,480,509,513,516,542,546,549],[448,449,450,456,457,461],"p",{},[451,452,98],"a",{"href":453,"rel":454},"https:\u002F\u002Fjobven.com\u002F",[455],"nofollow"," is a job posting API built from the data infrastructure I created for ",[451,458,106],{"href":459,"rel":460},"https:\u002F\u002Fmaplestack.ca\u002F",[455],".",[463,464,466],"h2",{"id":465},"the-backstory","The Backstory",[448,468,469],{},"MapleStack aggregates thousands of Canadian tech jobs by scraping directly from employer career pages. After building and refining that system - handling the scrapers, normalizing data, keeping everything fresh - I realized other developers could use the same infrastructure.",[448,471,472],{},"Rather than everyone solving the same hard problem (reliable job data collection), I packaged what I'd built into an API. Jobven gives developers access to the same quality data that powers MapleStack.",[463,474,476],{"id":475},"what-makes-it-different","What Makes It Different",[448,478,479],{},"Jobven collects job postings directly from employer career pages - the original source. This means:",[481,482,483,491,497,503],"ul",{},[484,485,486,490],"li",{},[487,488,489],"strong",{},"Fresh data"," - Jobs appear as soon as employers post them",[484,492,493,496],{},[487,494,495],{},"No duplicates"," - Each posting traced to a single source",[484,498,499,502],{},[487,500,501],{},"Structured metadata"," - Skills, salary, location all normalized",[484,504,505,508],{},[487,506,507],{},"Verified employers"," - Every job linked to a real company",[463,510,512],{"id":511},"who-its-for","Who It's For",[448,514,515],{},"Jobven is built for developers creating:",[481,517,518,524,530,536],{},[484,519,520,523],{},[487,521,522],{},"Niche job boards"," - Remote-only, industry-specific, regional",[484,525,526,529],{},[487,527,528],{},"Recruiting tools"," - Match candidates, track hiring trends",[484,531,532,535],{},[487,533,534],{},"Career platforms"," - Add job recommendations to your product",[484,537,538,541],{},[487,539,540],{},"Market intelligence"," - Analyze hiring patterns and salary data",[463,543,545],{"id":544},"try-it","Try It",[448,547,548],{},"The API has a free tier with 750 calls\u002Fmonth - enough to build and test real features.",[481,550,551,558,565],{},[484,552,553],{},[451,554,557],{"href":555,"rel":556},"https:\u002F\u002Fjobven.com\u002Fdocs",[455],"Documentation",[484,559,560],{},[451,561,564],{"href":562,"rel":563},"https:\u002F\u002Fjobven.com\u002Fsignup",[455],"Sign up free",[484,566,567],{},[451,568,571],{"href":569,"rel":570},"https:\u002F\u002Fjobven.com\u002Fpricing",[455],"Pricing",{"title":573,"searchDepth":157,"depth":157,"links":574},"",[575,576,577,578],{"id":465,"depth":157,"text":466},{"id":475,"depth":157,"text":476},{"id":511,"depth":157,"text":512},{"id":544,"depth":157,"text":545},[366],"2025-12-03","Jobven is a job posting API that collects listings directly from employer career pages. Fresh, structured job data for developers building job boards and recruiting tools.","md",null,"\u002Fassets\u002Fimages\u002Fblog\u002Fjobven.png",{},true,{"title":98,"description":581},{"loc":99},[366,174,383],"pjrg1NVbMA5WnvsX8huNC-TP8ArJ80jbYcubm7HZez0",[592,594],{"id":362,"color":149,"description":363,"extension":151,"meta":593,"name":365,"slug":366,"stem":367,"__hash__":368},{},{"id":169,"color":170,"description":171,"extension":151,"meta":595,"name":173,"slug":174,"stem":175,"__hash__":176},{},1789240766648]