Rs
-
App deployment
We use Kamal to deploy all apps.
- Read about best practices for SSH keys
Generate keys:
ssh-keygen -t ed25519 -f ~/.ssh/respiro -C "{NAMEOFKEYHOLDER}"Ask someone with access to put it in
authorized_keyson the app server.You can add an alias to deploy when you’re in the root folder of the project:
bd='./gradlew build -x test && kamal deploy --skip-hooks'This will create a jar file which is used in the
Dockerfilethat is used by Kamal to create an image and run the container on the server. -
Best practices / conventions
These are rules for developing our applications. Primarily to avoid discussing how to do things when multiple valid approaches are possible.
- The tech stack to use for all projects is described in the full-stack test No other dependencies should be added unless there is a really good reason.
- Keep Data API and Application API separate, read this:
If you split your API into Data and Application APIs, as advocated here, you should consider changing your Application API from JSON to Hypermedia (HTML) & using a hypermedia-oriented library like htmx to reap the benefits of the hypermedia model (simplicity, reliability, flexibility, etc.)So we do not create a general purpose API used by both the front end and back end. The public API can be separate and use JSON.
-
DB engineer (tests)
PostgreSQL DB-administrator tests
These exercises evaluate your ability to design, tune and reason about Postgres DB management
Tooling requirements
- IntelliJ IDEA Ultimate – use the built-in DB client
- Latest stable PostgreSQL (Docker or native).
- Flyway for all schema and data-fix migrations.
- Spring Boot + Kotlin, to run migrations, populate test data and do queries.
Test 1 – Column Tetris (storage efficiency)
In this test you will demonstrate why column order and column data type matters.
-
Employee hardware
Computer
We want all employees(longterm) to be on the same OS, so we buy exclusively Apple hardware to employees.
What we offer is the latest mac mini base model at the time of buying, in 2025: Mac mini M4 16 GB RAM, 256 GB SSD.
In future years it will be M5 etc. Employees can usually upgrade every 2-3 years.
If the employee wants a more expensive macbook or upgrade from the base model, the company can cover part of the cost, equivalent to the price of the mac mini base model, example:
-
Freelance to fulltime
Freelance (unpredictable) to fulltime
If you want to work fulltime instead of freelance, the requirements are:
- You can only work for us, no one else
- You need to be available for fulltime, 40 hours per week(37.5 excluded lunch), 8 hours per week day
- You need to have shown over time through the freelancer platform that you are reliable and have the available time. Specifically you need to have worked 1 month through the freelancer platform where you work at least 35 hours per week
Standard contract
- Monthly fixed payment directly to your account paid with Wise / Airwallex. We can pay to almost anywhere in the world with little fees through these platforms.
- Payment in most currencies. We don’t need to pay in USD, but can pay directly in the currency of your home country if you prefer that. Saving on currency conversion fees.
- The payment date is 1st every month. Up front, for work done that month. So 1st January you get payment for the whole of January
- 20 days off during the year. That can be used for vacation, sick days. Any reason is valid, you have 20 days you simply don’t need to work
- We will provide you with the best work equipment, typically the latest mac desktop computer (mac mini). This will be bought as needed, it is best to buy at the beginning of the release cycle, as to not buy products that soon will be superseded
- No need for time tracking through the freelancer platform anymore.
- You’re required to work 40 hours a week. We are flexible with work hours, but ultimately the employer decides when to work during weekdays. We will try to adapt to timezone differences
- Yearly increases, based on performance
Overtime
- In general, I don’t want people to work overtime on weekdays, meaning more than 8 hours in a day. If for some reason you must work 8.30 hours for example, just work 7.30 another day so it evens out.
- If you want to work additionally on Saturday/Sunday, be sure to send a start and end loom each day, and inform at the end of month how many hours you did extra, it will then be added to your payment the 1st.
- The additional payment is calculated as (X / (21*8)) * monthlyRate, where X is the number of extra hours
Working hours
- You have to work, unless otherwise asked for, within 7-17 of your local time. I don’t believe in night / evening work. This means you can start 7-15, or 9-17. Slight deviations from this is of course possible
- If you want to work non-standard hours, you need to inform in advance
- Read about good sleep hygiene. Sleeping and waking up at the same time every day is objectively better for your health.
Exit bonus
In software development, churn is a big problem, we want our developers to work with us for a long time. To incentivize this, we have a very generous exit bonus program.
-
Frontend developer (tests)
Frontend developer tests
test 1
Use these AIs to create a simple web app or landing page of your choice, you should give the same prompt to all 3 AIs and compare the output.
Use the current best model from the above providers, or another one if you have a good reason.
You have to use Web Awesome for UI components.
Make sure you read the Web awesome docs and use all it offers: Color variables, components, patterns etc.
-
Fullstack developer (tests)
Fullstack developer tests
These tests are made to assess your skills using the stack of our AI customer service app which:
- Integrates with Gmail API, Shopify API, Airtable API, Webshipper API, OpenAI API
- Generates automatic answers and actions to customer service emails, with human in the loop
Tech stack:
- Spring Boot & Kotlin
- Postgres
- Flyway for database migrations
- HTMX & Thymeleaf server side rendering
- Web Awesome for UI components (web components)
- Make sure you use Web awesome design tokens for color, spacing and more
- Gradle, Kotlin DSL (build.gradle.kts)
Other details:
-
General tech skills (tests)
General tech skills
The goal of the tests here is to teach you some of the basics:
- Shortcuts in your operating system of choice
- Use AI’s like chatGPT.com and claude.ai to help you with your work
- Use a password manager, the one built into Chrome, passwords.google.com is fine
- Know Gmail shortcuts, and your inbox should always be empty at the end of the day, archive what has been answered Delete emails that have no historical value
- Know how to do screen recordings and screenshots efficiently, loom is a good tool
- Know what compression is, imageoptim on mac, or optimize.photos. But even more important, know about the best image formats to use, at the time of this writing AVIF has very good support and the best compression.
- Know the basics of HTML, CSS, and Javascript.
- Know the basics of python programming
- Naming is important, always have good filenames
- Basics about how a computer and networks work
- How systems communicate with each other, APIs
- How to install extensions in your browser, for example adblockers
This is the minimum set of skills we expect from anyone working with us.
-
How to handle email - The inbox as a TODO list
These rules should “never” be broken:
- The inbox should act as a TODO list, it should be empty at the end of the day (ideally)
- Delete all emails that have no value in the future. Things like marketing, one-time codes. If you realistically will never check the email again (most emails), then delete it
- Emails that have been handled, but might be needed for the future to follow up or check information, should be archived
- Only keep email in the inbox that have not been handled yet, that needs to be answered, or that reminds you of something that needs to be done.
- Unsubscribe from all marketing
Note that archived email is findable in “all email” in Gmail.
-
Marketing plan
Channels
In general we should aim to “own our customers”, when you are reliant on third parties to access customers, it is usually more expensive, and you run into “platform risks”:
- Email list is very inexpensive to send to, you “own it”
- Reaching people on FB is hard organic, meta owns the platform and will push you to do ads to reach customers
- groups on FB is something you “own”, but still runs into the risk of FB making it harder to reach people without paying
- Organic Google/Bing is the “cheapest” after the initial work, but still maintenance required to keep you position.
The general idea is to prefer, or at least think about the risk each platform has.
-
One-shot scripts and oneliners with python and uv
Below, I provide custom instructions which makes it possible to easy to get one-shot scripts that “just work” and the equivalent for terminal oneliners.
The big advantage with the terminal oneliner approach is that you don’t even have to make a file.
An example based on the custom instructions below would be:
tog create github repo Y for org Z with description 'marketing page' and add it to team X -
Staying 'up to date'. Avoid becoming legacy. Regular tasks
I believe the industry is generally moving forward in the right direction:
- Languages get better, for example JDK more performant
- Build tools like Gradle get faster
- OS’s get better and more secure
- Libraries get more efficient and have more useful features
There are of course regressions, but in general it is worth it to stay up to date.
Therefore I will define a list of software that we need to keep up to date. The person assigned to follow the development of the software, will not only read about the news, but inform the team when it is relevant and learn it in depth.
-
What I expect from employees
What I expect from employees
If you’re reading this, chances are you want to work with me
I really care about learning. And I hope you do too.
The hiring process is simple:
You will record looms that document your skills and communication abilities (english).
If you perform well, you will most likely get an offer immediately. No further interviews needed.
Basic requirements
- You should not smoke or do drugs.
- You should not drink alcohol
- You should exercise regularly
A healthy human is a better human. Have respect for your own body and mind.