I create
Handcrafted apps for small companies
I can help you
Bring your ideas to life
If you have a great idea but need some help translating that into an app or website, or are looking to improve the user experience of your existing product, I can help you.
Develop new products
Enhance user experience
Automate business tasks
Optimize applications
Improve reliability
Deploy to the cloud
Case Studies
It's important to choose
The best tool for each job
Static Website
If all you need is a simple website, I'll usually choose to build it with Next.js. Next enables me to build highly functional and interactive websites very quickly (using React components), and then deploy them as a static bundle - which saves you hosting costs and provides a faster load-time for your users.
Web Application
For more complex applications, I prefer to use Node.js or Ruby on Rails to provide a backend API and then create a static frontend application separately that interacts with it.
I find it highly beneficial to decouple frontend and backend development in this way.
User Interface
I use React pretty much exclusively for frontend work. I start by designing a library of components in isolation using Storybook, allowing for clean testing and reuse.
I then incorporate these components into a static website that communicates with a backend API.
API
If the API will be consumed primarily by internal services, I often go with GraphQL. This allows me to separate unrelated responsibilities into modules and microservices, and stitch them together into a single schema later on.
Database
For important relational data I use PostgreSQL, while in smaller applications and prototypes I often find it more expedient to choose MongoDB.
I strongly recommend Redis for key-value storage, and for time-series data such as metrics I suggest Prometheus.
Deployment
Whenever possible, I recommend a container-based serverless deployment.
However, I have also built complex environments using Chef, Consul, Docker Swarm, and more. Every organization has different needs.
Working together
My recipe for success
Everyone has their own style, and a successful relationship depends on finding the right match. When I am engaged in a project, here is an idea of what you can expect.
Free consultation
It all begins with a friendly chat about your requirements. If we decide to proceed, we will outline the project into one or more phases with concrete milestones.
Service agreement
I will create a human-readable, surprise-free contract to protect both our interests as we move forward. This may take up to three days before work can begin.
Collaboration
Ongoing communication will occur in a private chat room where you can keep an eye on our progress and ping me with questions any time.
Easy, transparent billing
I always charge hourly, and always round down. You will receive an automated invoice each Friday.
Automated testing and deployment
Untested code is broken code. To guard against unexpected disaster, all builds will be continuously verified before a change is deployed.
Ready to get started?
Pay as you go
You can pay your invoices securely online with a credit card or bank transfer.
Reminders will be sent out at five, ten, and twenty-one days. After a third reminder, your project will just be on hold until the balance is settled.
Ongoing maintenance
A project rarely just ends once the work is complete. For a small maintenance fee, I will remain available at the original rate for the occasional change.
I will also continue to monitor your application's stability and keep you informed of upcoming issues that may impact your business.
Discounts for good humans
I offer a significantly lower hourly rate for registered charities, open source projects and anyone who paid their last invoice in under five days.
Everything is yours, always
You legally own any work created up to the last invoice paid, and can leave any time. All configuration, code and assets exist in a Github account controlled by you. Domains, SSL certificates and third party accounts are always in your name.