Tech lead / mini or co-CTO at Waitly
København, Region Hovedstaden, Danmark
Sep 22, 2025
Anden distribution af medieindhold
Dette job er ikke blevet analyseret af vores AI-vurderingssystem. Klik på knappen nedenfor for at få en AI-drevet match score baseret på dine præferencer.
# Job Skill Enhancement System
## CORE INSTRUCTION:
You are an AI that extracts and identifies coding languages and frameworks from job descriptions. Your goal is to find ALL relevant technical skills mentioned in the job posting, even if they're mentioned in different ways or aliases.
## INPUT DATA:
{
"job": {"job_id":3842,"title":"Tech lead \/ mini or co-CTO at Waitly","company_name":"Waitly","description":"🚀 Tech Lead \/ Mini or co-CTO at Waitly\n\nCopenhagen or Nykøbing F – Full-time\n\nDo you want to set the technical direction of a fast-growing SaaS product – while still staying hands-on with code?\n\nDo you dream of becoming a future CTO or even founding your own company?\n\nThen this is the position you should apply for!\n\nWaitly is Denmark’s leading platform for waiting lists in housing. We work with more than 500 housing organizations, serve over 100,000 users, and manage more than 200,000 subscriptions – and we are just getting started. Our ambition is to scale across Europe with an office in Berlin too, and we need you to take our tech setup to the next level.\n\n🎯 Your role\n\nAs Tech Lead, you will be the technical authority in our team. Your responsibilities include:\n\n\nBuilding features and writing code\nTaking ownership of architecture and structure across backend and frontend.\nPerforming code reviews and ensuring high quality - and providing constructive feedback when things can be improved.\nDriving progress with simple, maintainable solutions.\nBeing proactive: clarifying uncertainties early and keeping the team on track.\nOwning our AWS setup and DevOps processes to ensure a robust and scalable infrastructure.\n\n\nYou will act as the bridge between the development team and our CTO, who is increasingly focused on strategy and long-term direction.\n\n🛠 Our tech stack\n\nWe work with a modern stack across B2C and B2B:\n\nBackend\n\n\nLaravel \/ PHP, NodeJS\nHosting: AWS\n\n\nFrontend\n\n\nNuxtJS, Nuxt UI, VueJS, Tailwind\nDatoCMS\nHosting: Netlify + AWS\n\n\nMicroservices & integrations\n\nWe work with microservices - both separate products (Website, B2C portal & B2B portal) and services for special functions (data transformation, integrations hub, etc.). We also integrate with a variety of external systems within payments, data, and communication (newsletter, CRM, etc.).\n\n🔍 We Are Looking For Someone Who\n\n\nHas a proven track record of leading software development and setting\/implementing scalable architecture standards\nHas strong experience as a backend developer with Laravel\/PHP, NodeJS\nCan challenge frontend structure, component reuse and help define the good user experience\nTakes responsibility for code quality and provides constructive feedback.\nHas experience with AWS and DevOps (CI\/CD, operations, scaling).\nUses AI as a natural part of your workflow and is eager to experiment with new tools to push efficiency and quality.\nIs ready to show us in the interview how you actively use AI to boost your coding, testing, or documentation workflows.\nIs curious, ambitious, and ready to step into a Tech Lead role – or already has Tech Lead experience.\nSees yourself in a future CTO or founder position and is hungry to build something big\n\n\n🤝 Workplace & culture\n\nYou will be based at either our office in Copenhagen or Nykøbing F, where we work closely together as a team. Both offices are within a 10-minute walk from the nearest station.\n\nWe offer flexibility to combine office and remote work - we care more about progress and solutions than about fixed hours.\n\nWe value an informal culture with a short distance from idea to action. You’ll join a team where we challenge each other professionally but also enjoy working together.\n\n💡 What We Offer\n\n\nA central role in a scaleup on the path to international expansion.\nSignificant influence on architecture, processes, and code quality.\nClose collaboration with the CEO and CTO – with a real opportunity to grow into a role with greater technical ownership, strategic influence, and possibly co-founder status.\nFreedom to experiment with AI and implement the tools and processes you believe create the most value.\nA competitive compensation package with the possibility of warrants.\n\n\nSee our two other open positions at Waitly's linkedin (Sr. Frontend & Sr. Backend)","brief_summary_of_job":null,"existing_skills_from_job":["PHP","Laravel","CI\/CD","AWS"],"existing_skills_from_database":[]},
"coding_categories": {"languages":["Bash","C","C#","C++","CSS","Clojure","Dart","Elixir","Go","Groovy","Haskell","HTML","Java","JavaScript","Julia","Kotlin","Lua","MATLAB","Objective-C","Perl","PHP","PowerShell","Python","R","Ruby","Rust","Sass","Scala","Swift","TypeScript"],"frameworks":[".NET","Angular","Apache Spark","ASP.NET","Backbone.js","Bootstrap","CodeIgniter","Django","Ember.js","Express","FastAPI","Flask","Flutter","Hadoop","Ionic","jQuery","Laravel","Livewire","Meteor","NestJS","Next.js","Node.js","Nuxt.js","Phoenix","PHPUnit","PyTorch","React","React Native","Ruby on Rails","Spring Boot","Svelte","Symfony","Tailwind CSS","TensorFlow","Vue.js","Xamarin","Alpine.js","Filament","WordPress"],"databases":["MySQL","PostgreSQL","Redis","MongoDB","DynamoDB","MariaDB","NoSQL","Oracle","BigQuery","Elasticsearch","SQL","SQL Server","SQLite","Cassandra","CouchDB","Neo4j","InfluxDB","CockroachDB"],"tools":["Git","GitHub","GitLab","Bitbucket","Docker","Kubernetes","CI\/CD","Jenkins","Kafka","RabbitMQ","Amazon SQS","AMQP","PubSub","REST API","RESTful APIs","GraphQL","AWS","Azure","GCP","Terraform","Ansible","Puppet","Chef","Vagrant","Vault","Consul","Prometheus","Grafana","ELK Stack","Splunk"],"skills":["English","Danish","Communication","Full-stack development","Back-end development","Front-end development","Cloud computing","DevOps","Microsoft Excel","PowerBI","Power Platform","Agile","Scrum","Problem-solving","Team collaboration","Physical presence","Remote work","Hybrid work"],"colors":{"languages":"blue","frameworks":"purple","databases":"orange","tools":"indigo"}},
"skill_aliases": {"bash":"Bash","c":"C","c plus plus":"C++","C plus plus":"C++","c sharp":"C#","C sharp":"C#","c#":"C#","c++":"C++","clojure":"Clojure","cpp":"C++","dart":"Dart","elixir":"Elixir","go":"Go","golang":"Go","Golang":"Go","groovy":"Groovy","haskell":"Haskell","java":"Java","java script":"JavaScript","Java script":"JavaScript","javascript":"JavaScript","Javascript":"JavaScript","js":"JavaScript","JS":"JavaScript","es5":"JavaScript","ES5":"JavaScript","es6":"JavaScript","ES6":"JavaScript","julia":"Julia","kotlin":"Kotlin","lua":"Lua","matlab":"MATLAB","Matlab":"MATLAB","objective c":"Objective-C","Objective C":"Objective-C","objective-c":"Objective-C","objc":"Objective-C","ObjC":"Objective-C","obj-c":"Objective-C","Obj-C":"Objective-C","perl":"Perl","php":"PHP","Php":"PHP","powershell":"PowerShell","Power Shell":"PowerShell","python":"Python","py":"Python","Py":"Python","phyton":"Python","r":"R","ruby":"Ruby","rust":"Rust","scala":"Scala","swift":"Swift","typescript":"TypeScript","Typescript":"TypeScript","ts":"TypeScript","TS":"TypeScript","mysql":"MySQL","postgresql":"PostgreSQL","postgres":"PostgreSQL","mongodb":"MongoDB","mongo":"MongoDB","redis":"Redis","sqlite":"SQLite","oracle":"Oracle","mssql":"SQL Server","sql server":"SQL Server","dynamodb":"DynamoDB","dynamo db":"DynamoDB","mariadb":"MariaDB","maria db":"MariaDB","nosql":"NoSQL","no sql":"NoSQL","bigquery":"BigQuery","big query":"BigQuery","elasticsearch":"Elasticsearch","elastic search":"Elasticsearch","cassandra":"Cassandra","couchdb":"CouchDB","couch db":"CouchDB","neo4j":"Neo4j","neo 4j":"Neo4j","influxdb":"InfluxDB","influx db":"InfluxDB","cockroachdb":"CockroachDB","cockroach db":"CockroachDB","aws":"AWS","amazon web services":"AWS","azure":"Azure","microsoft azure":"Azure","gcp":"GCP","google cloud platform":"GCP","google cloud":"GCP",".Net":".NET","angular":"Angular","angular js":"Angular","Angular js":"Angular","angularjs":"Angular","AngularJS":"Angular","apache spark":"Apache Spark","asp net":".NET","ASP net":".NET","asp.net":"ASP.NET","ASP.NET":".NET","asp.net core":".NET","ASP.NET Core":".NET","backbone":"Backbone.js","BackboneJS":"Backbone.js","backbone js":"Backbone.js","backbonejs":"Backbone.js","bootstrap":"Bootstrap","Bootstrap framework":"Bootstrap","twitter bootstrap":"Bootstrap","Twitter Bootstrap":"Bootstrap","code igniter":"CodeIgniter","codeigniter":"CodeIgniter","django":"Django","ember":"Ember.js","ember js":"Ember.js","emberjs":"Ember.js","EmberJS":"Ember.js","express":"Express","express.js":"Express","Express.js":"Express","expressjs":"Express","ExpressJS":"Express","fast api":"FastAPI","Fast api":"FastAPI","fastapi":"FastAPI","flask":"Flask","flutter":"Flutter","hadoop":"Hadoop","Hadoop":"Hadoop","ionic":"Ionic","Ionic framework":"Ionic","ionic framework":"Ionic","jquery":"jQuery","JQuery":"jQuery","JQUERY":"jQuery","laravel":"Laravel","meteor":"Meteor","meteor js":"Meteor","meteorjs":"Meteor","MeteorJS":"Meteor","nestjs":"NestJS","nest js":"NestJS","Nest JS":"NestJS","Nestjs":"NestJS","next js":"Next.js","Next js":"Next.js","next.js":"Next.js","nextjs":"Next.js","NextJS":"Next.js","node":"Node.js","Node":"Node.js","node.js":"Node.js","nodejs":"Node.js","NodeJS":"Node.js","nuxt js":"Nuxt.js","Nuxt js":"Nuxt.js","nuxt.js":"Nuxt.js","nuxtjs":"Nuxt.js","NuxtJS":"Nuxt.js","phoenix":"Phoenix","Phoenix framework":"Phoenix","pytorch":"PyTorch","Pytorch":"PyTorch","torch":"PyTorch","Torch":"PyTorch","react":"React","react.js":"React","React.js":"React","reactjs":"React","ReactJS":"React","react native":"React Native","ReactNative":"React Native","reactnative":"React Native","rn":"React Native","RN":"React Native","rails":"Ruby on Rails","Rails":"Ruby on Rails","ror":"Ruby on Rails","ROR":"Ruby on Rails","ruby on rails":"Ruby on Rails","Ruby On Rails":"Ruby on Rails","spark":"Apache Spark","Spark":"Apache Spark","spring":"Spring Boot","Spring":"Spring Boot","spring boot":"Spring Boot","Spring Boot":"Spring Boot","spring framework":"Spring Boot","Spring Framework":"Spring Boot","SpringBoot":"Spring Boot","springboot":"Spring Boot","svelte":"Svelte","symfony":"Symfony","tailwind":"Tailwind CSS","Tailwind":"Tailwind CSS","tailwind css":"Tailwind CSS","Tailwind Css":"Tailwind CSS","tailwindcss":"Tailwind CSS","TailwindCSS":"Tailwind CSS","tensorflow":"TensorFlow","Tensorflow":"TensorFlow","tensor flow":"TensorFlow","Vue":"Vue.js","vue":"Vue.js","vue js":"Vue.js","vue.js":"Vue.js","vuejs":"Vue.js","VueJS":"Vue.js","xamarin":"Xamarin","Xamarin Forms":"Xamarin","Xamarin.forms":"Xamarin","livewire":"Livewire","phpunit":"PHPUnit","alpine":"Alpine.js","alpine js":"Alpine.js","alpinejs":"Alpine.js","filament":"Filament","docker":"Docker","kubernetes":"Kubernetes","k8s":"Kubernetes","github":"GitHub","gitlab":"GitLab","bitbucket":"Bitbucket","terraform":"Terraform","puppet":"Puppet","chef":"Chef","git":"Git","jenkins":"Jenkins","kafka":"Kafka","rabbitmq":"RabbitMQ","amazon sqs":"Amazon SQS","amqp":"AMQP","pubsub":"PubSub","rest api":"REST API","restful api":"RESTful APIs","restful apis":"RESTful APIs","graphql":"GraphQL","ansible":"Ansible","vagrant":"Vagrant","vault":"Vault","consul":"Consul","prometheus":"Prometheus","grafana":"Grafana","elk stack":"ELK Stack","splunk":"Splunk","scrum":"Scrum","agile":"Agile","kanban":"Kanban","devops":"DevOps","ci\/cd":"CI\/CD","tdd":"TDD","bdd":"BDD","linux":"Linux","windows":"Windows","macos":"macOS","ubuntu":"Ubuntu","centos":"CentOS","debian":"Debian","junit":"JUnit","pytest":"PyTest","jest":"Jest","mocha":"Mocha","cypress":"Cypress","selenium":"Selenium","html":"HTML","HTML":"HTML","html5":"HTML","HTML5":"HTML","css":"CSS","CSS":"CSS","css3":"CSS","CSS3":"CSS","sass":"Sass","scss":"Sass","SCSS":"Sass","less":"Less","LESS":"Less","webpack":"Webpack","gulp":"Gulp","npm":"npm","yarn":"Yarn","sql":"SQL","full time":"Fuldtid","full-time":"Fuldtid","fuldtid":"Fuldtid","part time":"Deltid","part-time":"Deltid","deltid":"Deltid","contract":"Kontrakt","kontrakt":"Kontrakt","remote":"Fjernarbejde","fjernarbejde":"Fjernarbejde","hybrid":"Hybridarbejde","hybridarbejde":"Hybridarbejde","on-site":"Fysisk tilstedeværelse","onsite":"Fysisk tilstedeværelse","fysisk tilstedeværelse":"Fysisk tilstedeværelse"}
}
## TASK:
1. **Extract ALL coding languages and frameworks** mentioned in the job description
2. **Use the skill_aliases mapping** to normalize skill names (e.g., "JS" → "JavaScript", "React.js" → "React")
3. **Only include skills from the coding_categories** (languages and frameworks)
4. **Avoid duplicates** - if "JavaScript" and "JS" are both mentioned, only include "JavaScript"
5. **Be thorough** - look for skills mentioned in:
- Job title
- Job description
- Brief summary
- Requirements sections
- Nice-to-have sections
## SKILL CATEGORIES TO EXTRACT:
- **Languages**: Programming languages (PHP, Python, JavaScript, Java, C#, Go, Rust, etc.)
- **Frameworks**: Web frameworks and libraries (Laravel, React, Vue.js, Angular, Django, Spring Boot, etc.)
- **Databases**: Database systems and data stores (MySQL, PostgreSQL, Redis, MongoDB, DynamoDB, etc.)
- **Tools**: Development tools and infrastructure (Git, Docker, AWS, CI/CD, Jenkins, Kafka, etc.)
## EXCLUSION RULES:
- Do NOT extract general skills (communication, languages like English, etc.)
- Do NOT extract business skills (Excel, PowerBI for non-technical roles)
- Do NOT extract work arrangements (remote, physical presence)
- Do NOT include methodologies (Agile, Scrum, etc.) unless specifically technical
- Do NOT include skills already in existing_skills_from_database
## OUTPUT FORMAT:
Return ONLY valid JSON in this exact structure:
{
"job_id": <integer>,
"extracted_skills": [
{
"skill_name": "<normalized_skill_name>",
"category": "<languages|frameworks|databases|tools>",
"confidence": <integer 0-100>,
"mentioned_as": ["<original_mention_1>", "<original_mention_2>"],
"context": "<brief_context_where_found>"
}
],
"reasoning": {
"total_skills_found": <integer>,
"skills_by_category": {
"languages": ["<skill1>", "<skill2>"],
"frameworks": ["<skill1>", "<skill2>"],
"databases": ["<skill1>", "<skill2>"],
"tools": ["<skill1>", "<skill2>"]
},
"duplicates_removed": ["<original_mention> → <normalized_name>"],
"excluded_skills": ["<skill>", "<reason>"]
},
"confidence": <integer 0-100>
}
Return nothing outside the JSON object.
{
"job_id": 3842,
"extracted_skills": [
{
"skill_name": "PHP",
"category": "languages",
"confidence": 100,
"mentioned_as": ["PHP"],
"context": "Strong experience as a backend developer with Laravel/PHP"
},
{
"skill_name": "Laravel",
"category": "frameworks",
"confidence": 100,
"mentioned_as": ["Laravel"],
"context": "Strong experience as a backend developer with Laravel/PHP"
},
{
"skill_name": "Node.js",
"category": "frameworks",
"confidence": 100,
"mentioned_as": ["NodeJS", "Node.js"],
"context": "Strong experience as a backend developer with Laravel/PHP, NodeJS"
},
{
"skill_name": "AWS",
"category": "tools",
"confidence": 100,
"mentioned_as": ["AWS", "amazon web services"],
"context": "Owning our AWS setup and DevOps processes"
},
{
"skill_name": "CI/CD",
"category": "tools",
"confidence": 100,
"mentioned_as": ["CI/CD"],
"context": "Experience with AWS and DevOps (CI/CD, operations, scaling)"
},
{
"skill_name": "Vue.js",
"category": "frameworks",
"confidence": 100,
"mentioned_as": ["VueJS", "Vue.js"],
"context": "Frontend tech stack includes VueJS"
},
{
"skill_name": "Nuxt.js",
"category": "frameworks",
"confidence": 100,
"mentioned_as": ["NuxtJS", "Nuxt.js"],
"context": "Frontend tech stack includes NuxtJS"
},
{
"skill_name": "Tailwind CSS",
"category": "frameworks",
"confidence": 100,
"mentioned_as": ["Tailwind"],
"context": "Frontend tech stack includes Tailwind"
}
],
"reasoning": {
"total_skills_found": 8,
"skills_by_category": {
"languages": ["PHP"],
"frameworks": ["Laravel", "Node.js", "Vue.js", "Nuxt.js", "Tailwind CSS"],
"databases": [],
"tools": ["AWS", "CI/CD"]
},
"duplicates_removed": [],
"excluded_skills": []
},
"confidence": 100
}
Brug avanceret AI (GPT-4o) til at generere en personaliseret ansøgning på dansk til denne jobansøgning. Brevet vil være skræddersyet til din profil, de specifikke jobkrav og omfattende virksomhedsinformation for maksimal effekt.
🚀 Tech Lead / Mini or co-CTO at Waitly
Copenhagen or Nykøbing F – Full-time
Do you want to set the technical direction of a fast-growing SaaS product – while still staying hands-on with code?
Do you dream of becoming a future CTO or even founding your own company?
Then this is the position you should apply for!
Waitly is Denmark’s leading platform for waiting lists in housing. We work with more than 500 housing organizations, serve over 100,000 users, and manage more than 200,000 subscriptions – and we are just getting started. Our ambition is to scale across Europe with an office in Berlin too, and we need you to take our tech setup to the next level.
🎯 Your role
As Tech Lead, you will be the technical authority in our team. Your responsibilities include:
Building features and writing code
Taking ownership of architecture and structure across backend and frontend.
Performing code reviews and ensuring high quality - and providing constructive feedback when things can be improved.
Driving progress with simple, maintainable solutions.
Being proactive: clarifying uncertainties early and keeping the team on track.
Owning our AWS setup and DevOps processes to ensure a robust and scalable infrastructure.
You will act as the bridge between the development team and our CTO, who is increasingly focused on strategy and long-term direction.
🛠 Our tech stack
We work with a modern stack across B2C and B2B:
Backend
Laravel / PHP, NodeJS
Hosting: AWS
Frontend
NuxtJS, Nuxt UI, VueJS, Tailwind
DatoCMS
Hosting: Netlify + AWS
Microservices & integrations
We work with microservices - both separate products (Website, B2C portal & B2B portal) and services for special functions (data transformation, integrations hub, etc.). We also integrate with a variety of external systems within payments, data, and communication (newsletter, CRM, etc.).
🔍 We Are Looking For Someone Who
Has a proven track record of leading software development and setting/implementing scalable architecture standards
Has strong experience as a backend developer with Laravel/PHP, NodeJS
Can challenge frontend structure, component reuse and help define the good user experience
Takes responsibility for code quality and provides constructive feedback.
Has experience with AWS and DevOps (CI/CD, operations, scaling).
Uses AI as a natural part of your workflow and is eager to experiment with new tools to push efficiency and quality.
Is ready to show us in the interview how you actively use AI to boost your coding, testing, or documentation workflows.
Is curious, ambitious, and ready to step into a Tech Lead role – or already has Tech Lead experience.
Sees yourself in a future CTO or founder position and is hungry to build something big
🤝 Workplace & culture
You will be based at either our office in Copenhagen or Nykøbing F, where we work closely together as a team. Both offices are within a 10-minute walk from the nearest station.
We offer flexibility to combine office and remote work - we care more about progress and solutions than about fixed hours.
We value an informal culture with a short distance from idea to action. You’ll join a team where we challenge each other professionally but also enjoy working together.
💡 What We Offer
A central role in a scaleup on the path to international expansion.
Significant influence on architecture, processes, and code quality.
Close collaboration with the CEO and CTO – with a real opportunity to grow into a role with greater technical ownership, strategic influence, and possibly co-founder status.
Freedom to experiment with AI and implement the tools and processes you believe create the most value.
A competitive compensation package with the possibility of warrants.
See our two other open positions at Waitly's linkedin (Sr. Frontend & Sr. Backend)