Adam Lynch

I'm Adam Lynch. I like to code, I like to write. Developer, author. Currently at Readwise.

  1. How to preprocess Cypress tests with Vite

    Vite and Cypress are fantastic, but I bet you already know that. The lowest “satisfaction” rating Cypress has ever received in a ‘The State of JS’ survey is 92%. In the latest survey, Vite took home awards for ‘Highest Satisfaction’ (97.4%) and ‘Highest Interest’ (83%).

    It’s clear why. Vite is a blazing fast feature-rich build tool from the creator Vue. Cypress is a versatile test runner which supports a surprising amount of browser test runners, continuous integration, time-travel debugging, and more.

    Today I’m going to explain how to preprocess your Cypress unit tests with Vite because, well, I had to figure it out and no one has written about it yet.

       Read more
  2. Introducing Back Of Your Hand

    I was sitting at my parents' kitchen table with my Dad and uncle, some time pre-COVID. They were throwing Dad Facts™ back and forth about Cork City. Like how Brown's Hill is the shortest hill (it's a short alley with nine steps).

    One thing lead to another and I started naming random streets from Google Maps to test them. It didn't matter how obscure I went, one of them would get it instantly. It was honestly really impressive. I know their jobs pre-retirement must've helped, but I'm convinced they were born part human, part map.

    And my dad was actually into it. This is a fella who asks "How long will it take?" if you ask him to play a board game. So I decided to code up a game as a Christmas present.

       Read more
  3. I've left Teamwork to chase the startup dream

    I feel like I should document a major change in my career and life. I've left my job at Teamwork to chase the dream in San Francisco.

    Teamwork has been a massive part of my life. It has been a fantastic 6.5 years. I wasn't looking for another job or anything like that; it has taken a once-in-a-lifetime opportunity to drag me away. I would hope everyone who worked with me closely already knows how much Teamwork means to me and how all-in I was.

       Read more
  4. What to consider before adding Markdown to your app

    I use Markdown daily. This article was written in it. I've built it into products. I personally like Markdown, but it doesn't belong in every app. If you are considering adding Markdown to your app, I'd like to let you in on the many things you need to think about, spanning UX, performance, security, product, and more.

    You might think I am over-thinking in places; that's OK, your mileage may vary. It all depends on your app and context. A key experience for me was building Teamwork Chat in which Markdown is featured front and centre. I took a lot of lessons from that, as well as from apps I've used personally which have perfected some bits and rightly messed up others.

       Read more
  5. Why empathy isn't a shortcut to great product design

    Cennydd Bowles wrote an absolutely fantastic book called Future Ethics which covers... well, yeah... ethics. Aside from teaching essential ethics theory like utilitarianism, deontological, and virtue ethics, it challenges us to build a fairer future. Is it OK to do X as long as no one knows? Or as long as it's done in good faith? What if everyone else is doing it? Or if it's for "the greater good"? Interestingly, no one approach to ethics is right, or wrong, all of the time.

       Read more
  6. Flexible data tables with CSS Grid

    Now that we've launched, I can finally talk about the secret project I've been working on for the last two years. One interesting piece of the Teamwork CRM puzzle was the "list view".

    It's a powerful page component which exists seven times in the app — a table on steroids essentially. I could talk about it for days but I won't bore you. I'll focus on how we added a lot of flexibility with a few lines of CSS (Grid). Namely, how we lay out data-heavy tables, how we support resizing of columns, and more.

       Read more
  7. How I made the @randomOpenAPI Twitter bot in 42 minutes-ish

    I love APIs. Especially open APIs. I wish there were way more of them. There's a lot of data out there we can't get our hands on. Imagine all of the unborn apps, studies, and infographics.

    The natural conclusion was to create a Twitter bot. Have you ever seen Stefan Judis' @randomMDN? It tweets a random article from MDN multiple times a day. I decided to create one of my own to raise awareness about open APIs. Plus it's an excuse for a small fun project.

       Read more
  8. Lessons learned leading teams

    I've been thinking about team leading a lot lately. When revisiting advice a friend asked for when transitioning to a team lead position, I decided to flesh it out and put it online. Most of the following will hopefully be helpful to anyone leading a team or any manager, although some will be more relevant to leaders of developers and developers transitioning into leadership roles. If it helps anyone, great. It will be a good reference for me at least. Alright, let's get to it.

       Read more
  9. 10 pro tips: how to work with production databases

    The goal here is get what you need done as quickly as possible and keep rolling. "Move fast and break things. Unless you are breaking stuff, you are not moving fast enough." - Mark Zuckerberg. 1. Connect to your production databases using the same tool you use for development. There's no need to...

       Read more
  10. How to improve your permissions UX

    "Welcome to Costco, can I have your phone number?" Most people would refuse, right? Well I suppose some might oblige, but that depends on a host of factors. This is what permissions requests are like on the web. Let's take a look at how we can do better, before it's too late. Side note: a phone number is like a SnapChat username to your parents.

       Read more
  11. Static site regeneration and focusing on what's important

    I've had my own site for years now but I haven't used it for much. A refresh was needed. I was focusing on the wrong things, trying to do everything, and getting nowhere slowly. It hasn't changed much in appearance, but that's just the tip of the iceberg. It has been completely redone beneath the surface.

       Read more
  12. Beyond The Browser: From Web Apps To Desktop Apps

    I started out as a web developer, and that’s now one part of what I do as a full-stack developer, but never had I imagined I’d create things for the desktop. I love the web. I love how altruistic our community is, how it embraces open-source, testing and pushing the envelope. I love discovering beautiful websites and powerful apps. When I was first tasked with creating a desktop app, I was apprehensive and intimidated. It seemed like it would be difficult, or at least… different.

       Read more
  13. Developing an Electron Edge (Book)

    Electron combines Chromium and Node.js, empowering you to create real desktop apps with HTML, CSS, and JavaScript, which integrate tightly into the desktop environment. In Developing an Electron Edge, we cover all things Electron. We breakdown what Electron is and what you can achieve with it over a typical desktop or Web app. Not only will we cover the complete development process from beginning to end, but the packaging and delivery of your app as well. You’ll discover some platform specific issues, learn how to deploy automatic updates, and even take a look at using one codebase for the desktop and the Web.

       Get the book
  14. Under the hood of a hybrid (app)

    It has been about a year since we had A peek under the hood of Teamwork Chat. Since then, we’ve added a few nice features, fixed some bugs, and introduced a couple. You know how it goes. More...

       Read more
  15. Resurrecting Clippy

    Remember Clippy? First shipped with Windows 97, Clippy was a “smart” assistant for Microsoft Office. A selfless shape-shifting paperclip who would appear out of nowhere to help you in any way it could. And how did you treat...

       Read more
  16. Platform detection in your NW.js app

    There are various reasons why you might want to detect which platform or operating system your app is currently being ran on. Your keyboard shortcuts or UI may differ per platform, you might want to store files in platform-specific directories on disk, etc. Thanks to node's os module, it isn't too difficult.

       Read more
  17. Transparency and NW.js

    Yes, NW.js does support transparency, albeit it is disabled by default. One way to enable transparency is to use the transparency property to your application's manifest like this...

       Read more
  18. NW.js: The App and Shortcut APIs

    The NW.js GUI library provides an "App" API, which contains a variety of methods and properties, some of which are essential to pretty much any app, and some have more obscure use cases. You can access the API as follows...

       Read more
  19. Installing your NW.js app on Windows

    NW.js is great for creating desktop applications using Web app technologies. If you're not familiar with NW.js, I'd advise you to read an introductory article like Creating Your First Desktop App With HTML, JS and Node-WebKit to get a good base first. This is a slightly more advanced article intended for anyone interested into distributing their NW.js app to Windows users.

       Read more
  20. npm and distribution path length problems

    You might have been unfortunate enough to learn that Windows has a 256 character limit on file paths. You could've ran into this problem locally or on end users' machines. There's no real workaround but there are preventive measures you can take. Even if you haven't, feel free to take pleasure from reading my horror story.

       Read more
  21. 10 things to know about Gulp

    I love Gulp. It’s great in so many ways and for so many purposes. I’ve been putting off writing a post on it forever. There’s just too much to write about; I could write a book on it. So instead, I’m going to give a quick introduction and share a few tips.

       Read more
  22. Building Your App: Creating Executables for NW.js

    How hard can it be to package up your NW.js app into real executables? To be a true desktop app, it should be a self-contained .exe, .app, or similar. There are a few ways to approach this. Let's start with the simplest approach with the least amount of code or configuration.

       Read more
  23. Olc: Ruin someone’s day with homoglyphs

    You might have seen Ben Johnson’s tweet. I’m sorry everyone, I’ve made a module which makes this a lot easier to do. It’s called Olc. “Olc” is the Irish word for “bad” and is inconspicious enough to go…

       Read more
  24. Dealing with long paths

    You might have been unfortunate enough to learn that Windows has a 256-character limit on file paths. You could’ve run into this problem locally or on end users’ machines. We’ve created a simple little module called gulp-path-length to…

       Read more
  25. A peek under the hood of Teamwork Chat

    The idea was to build a chat application of our own. A whole new standalone product to raise the bar for team communication and collaboration. From the beginning, Teamwork Chat was intended to tie our whole suite of…

       Read more
  26. CoffeeScript at Teamwork

    The first project at Teamwork to use CoffeeScript was the Teamwork.com iPad app. Fast forward two years. We now have web, mobile and even desktop apps built with CoffeeScript. If you need a primer, there’s no better place…

       Read more
  27. Hassle-free third-party dependencies

    How do you manage your third-party assets? With my simple setup, all I have to do is run one command and reload the page. Lets take a look at managing our third-party dependencies with Bower and preprocessing them…

       Read more