{"pageProps":{"item":{"slug":"storytelling-medium-kino-technologies-android","title":"Next great storytelling medium on Android","contentHtml":"

The team at Kino Technologies is building the next great storytelling medium on iOS and they hired me to bring it to Android. I built the MVP in 2 months when we launched with the Lizzie Bennet Diaries. The next launch was Obsessed LV, a series about Vegas teens.

\n

The initial iOS app was in development for 2 years and I had 2 months to try to attain feature parity as much as possible.

\n

The platform enables users to watch mobile TV shows and talk about them with their friends. Storytellers can publish a variety of media including video, samples of tweets and other text-related messages. Users can consume all this different types of media and chat about it with their friends in private groups (rooms) or in public groups with everybody on the app.

\n

Here's what I did, feature-wise:

\n\n

Here are some features that maybe developers and engineering teams care more about:

\n\n

Here are some things that stakeholders may care about:

\n\n

Here are some links:

\n","id":"bHyLam3OSOGitAnSwaHtrA","website":"https://play.google.com/store/apps/details?id=com.kinotechnologies.obsessed","images":[{"url":"https://www.datocms-assets.com/31032/1716836812-kino-technologies-2x.png","title":"Kino Technologies Android app","altText":"3 screenshots of the Kino Technologies app on Android, featuring the Lizzie Bennet Diaries show"},{"url":"https://www.datocms-assets.com/31032/1720117198-kino-technologies-obsessed-lv-android_00002.png","title":"Core experience for Obsessed LV allows users to see their rooms and public channels at a glance","altText":"Screenshot in light mode of the core experience of the app, including a gradient background (light blue, light pink, orange) with a fun doodle pattern"},{"url":"https://www.datocms-assets.com/31032/1720117190-kino-technologies-obsessed-lv-android_00001.png","title":"Forward messages to your friends","altText":"Screenshot of a forwarded animated GIF message"},{"url":"https://www.datocms-assets.com/31032/1720117204-kino-technologies-obsessed-lv-android_00003.png","title":"Users can consume mixed media including looking at the text messages that characters in the show send each other","altText":"Screenshot of text message media from Isabella: making a playlist for the party. what should i add. so far its just charli"},{"url":"https://www.datocms-assets.com/31032/1720117209-kino-technologies-obsessed-lv-android_00004.png","title":"Users can participate in public channels if they don't have friends on the app yet","altText":"Screenshot of the core experience of the app including a public channel named #vegas-summer"},{"url":"https://www.datocms-assets.com/31032/1720117214-kino-technologies-obsessed-lv-android_00005.png","title":"Android users can view GIF content","altText":"Screenshot of the public channel #gifs-n-memes where users share GIF clips of the video episode they watched. Current user reacted to the content with a laughing emoji reaction."},{"url":"https://www.datocms-assets.com/31032/1720117219-kino-technologies-obsessed-lv-android_00006.png","title":"Chat privately with your friends in rooms","altText":"Screenshot of a room where you can invite friends and chat privately"},{"url":"https://www.datocms-assets.com/31032/1720117224-kino-technologies-obsessed-lv-android_00007.png","title":"Various settings allow users to switch between light, dark or system appearance modes, configure notifications on or off based on the topic, view the privacy policy and credits, or contact support. There's also a hidden developer-only menu.","altText":"Screenshot of the app settings: Delete Account, Theme (System, Light, Dark), Privacy policy, Credits, Contact support, and developer debug menu"},{"url":"https://www.datocms-assets.com/31032/1720117229-kino-technologies-obsessed-lv-android_00008.png","title":"The core experience allows users to watch a video while viewing chat","altText":"Screenshot of the app in portrait mode which includes a video in the top third of of the screen, and a chat dialog bottom sheet in the bottom 2 thirds of the app with text and video messages. Includes a compose field that is populated by the user and says \"lol\""},{"url":"https://www.datocms-assets.com/31032/1716837701-cleanshot-2024-05-27-at-15-19-55.png","title":"Users can add participants from their contacts list, allowing them to scroll and check contacts, as well as search for them by name","altText":"Screenshot of the \"Add participants\" screen showing a list of contacts with checkboxes beside each one, allowing users to select contacts to add. Includes a search field to search by name."},{"url":"https://www.datocms-assets.com/31032/1716837877-cleanshot-2024-05-27-at-15-23-41.png","title":"Users can chat about media with their friends by composing a message and sending it to a room or a public group","altText":"Screenshot of the main screen with a text input field with words \"Hello, world\" with a send button on the right side."},{"url":"https://www.datocms-assets.com/31032/1716838129-cleanshot-321807781-f8ebf85e-11b9-4a70-8dbb-76128fd06b84-2.png","title":"The app allows content creators to create stories that include mixed media like text-based messages from popular social media services","altText":"Screenshot of text-based media in a dialog. Text is from a popular social media app. Bing Lee: hey caroline darcy you'll never guess what i just did. Caroline: You'rre right I won't. Darcy: What did you do now? I shudder"}],"showLaunchDate":true,"launchDate":"2024-05-03","featuredImage":{"url":"https://www.datocms-assets.com/31032/1716836812-kino-technologies-2x.png","title":"Kino Technologies Android app","altText":"3 screenshots of the Kino Technologies app on Android, featuring the Lizzie Bennet Diaries show"},"categories":[{"slug":"android","name":"Android"},{"slug":"kotlin","name":"Kotlin"}],"excerptHtml":"I helped Kino Technologies bring the next great storytelling medium to Android with the Lizzie Bennet Diaries and Obsessed LV apps","isFeatured":true},"seo":{"description":"I helped Kino Technologies bring the next great storytelling medium to Android with the Lizzie Bennet Diaries and Obsessed LV apps","image":{"url":"https://www.datocms-assets.com/31032/1716836812-kino-technologies-2x.png","width":2600,"height":1460,"type":"image/png"},"title":"Next great storytelling medium on Android","url":"https://tinaciousdesign.com/portfolio/storytelling-medium-kino-technologies-android"},"footerData":{"services":[{"id":"WuqofiiDQfCu9uO0SKZZdg","title":"Front-end Development","body":"

I've been doing front-end development since the early 2000s. Starting initially with just HTML and CSS, I progressed to using various languages and libraries to help with templating, and CSS preprocessors like Less, Stylus, and Sass/SCSS. I am fluent in various CSS frameworks/libraries like Bootstrap, Material UI, Foundation, and Tailwind, and now that front-ends are primarily single-page apps, I have worked extensively with CSS-in-JS tools like styled-components, emotion, radix-ui, shadcn.

\n

I have also done an extensive amount of front-end development for server-rendered apps like WordPress, Drupal, CakePHP, custom PHP apps, Handlebars and other moustache-inspired templating engines, server-rendered Rails templates, and similar technologies in other languages like Go and Rust.

\n

I do Responsive Web Design, which means I develop responsive interfaces for websites and web applications that are not only compatible with, but also optimized for all screen sizes and devices. I build web products to support the user's preferred appearance mode, including light mode and dark mode. My expertise in CSS allows me to help teams migrate their existing, large front-end codebases to support dark mode or be responsive and support mobile phones.

\n

I use a variety of JavaScript libraries and frameworks to build interactive web front-ends including JavaScript, React, Vue, Svelte, Ember, AngularJS, and jQuery. 

\n

I work with designers with varying levels of expertise—from your most opinionated senior designers to your more junior designers that could benefit from guidance from a tech lead to help them make their designs more efficient to implement to save time during development and increase team velocity. I use Figma and Sketch as a developer to help me ensure my implementations are accurate as I strive for pixel perfection.

\n

For more bootstrapped teams without designers, I design in the browser by implementing the desired functionality and making design choices as I go, leveraging the team's existing design system, brand guidelines, and UI frameworks. I can also use Figma to make wireframes or basic designs for stakeholders who want to see something before it's implemented.

\n

As a front-end tech lead, I have led multiple projects to build component libraries to help teams build UI faster. My experience helps me understand the importance of separating behaviour from style so that our team can move faster. I also structure my web apps and teams in a way to allow team members with a diverse set of talents to thrive at what they do best, for example, allowing those who prefer CSS and UI development to focus on that, and those who prefer working on behaviour and business logic to focus on that.

\n

I can augment your existing team to provide that front-end development expertise and guidance your team may be lacking, or work alongside your team of experts the way they prefer to work to help them power through a big project.

\n

Contact me if you're interested in working with me.

","slug":"front-end-development","publishedAt":"2024-06-08T19:25:34+01:00","summary":"

I turn the pretty pictures your designer makes into real, functioning websites and apps.

\n

I can build UI’s in a variety of tools including but not limited to HTML, CSS, JavaScript, React, Vue, and jQuery.

\n

I can work with your designer if you have one, or use my high attention to detail to come up with something aesthetically pleasing, simple, and efficient to implement.

","excerpt":"Expertise in front-end web development and turning pretty pictures into real, mobile-first responsive websites and apps in Canada","technologies":[{"id":"WtnEHGWER5eoDM5bCD4xpA","title":"HTML","dateStarted":"2002-01-01","slug":"html","isFeatured":false,"body":"

Extensive experience with HTML since the early 2000's and how to use HTML and CSS features to improve the performance of JavaScript applications.

\n"},{"id":"a6q0Ky2KTQSL2iiGayT1VQ","title":"CSS","dateStarted":"2001-01-01","slug":"css","isFeatured":false,"body":"

Extensive expertise with CSS including SCSS, Less, Stylus and Styled Components syntaxes to build scalable and maintainable CSS.

\n"},{"id":"CMUQ0-fERMKjfuLVXTlupw","title":"JavaScript / TypeScript","dateStarted":"2011-07-04","slug":"javascript","isFeatured":true,"body":"

Building interactive web applications with JavaScript and TypeScript.

\n"},{"id":"V0CRljSPQFyQmtNWNO5vzQ","title":"Next.js","dateStarted":"2020-03-01","slug":"nextjs","isFeatured":false,"body":"

Building robust applications in Next.js with TypeScript that support either Static Site Generation (SSG) or Server-Side Rendering (SSR) depending on the problem.

\n\n

As Next.js is a framework that is built on top of React, all React skills apply to Next.js.

"},{"id":"eZtXKzJ6T8ePjY52I2ejxA","title":"Chrome extensions","dateStarted":"2014-03-10","slug":"chrome-extensions","isFeatured":false,"body":"

Extensive experience building browser extensions for Google Chrome, including the distribution of several Chrome extensions in the Google Play Store.

\n"},{"id":"f9kg-mJkS62Jk18yALmuNQ","title":"Chromecast","dateStarted":"2021-01-01","slug":"chromecast","isFeatured":false,"body":"

Developing video streaming functionality for Chromecast end-to-end including Android, iOS, and web.

\n"},{"id":"RypVHGy2R0C301IOasGFmw","title":"Vue.js","dateStarted":"2015-01-01","slug":"vue","isFeatured":false,"body":"

Experience working with Vue 2, Vue 3, and Nuxt with Webpack and Vite build systems.

\n

Experience debugging Vue apps with the Vue dev tools to troubleshoot state management and rendering issues.

\n

Experience working with the composition API and VueX.

"},{"id":"eBpmqD64Tz-PmgBYiDXOfg","title":"Angular","dateStarted":"2013-08-01","slug":"angularjs","isFeatured":false,"body":"

I've been working with Angular since version 1.x since 2013 and have kept up with the framework, where I most recently built internal tools in Angular version 18.2. Angular is an excellent enterprise-level JavaScript framework for building robust and testable single page apps.

\n"},{"id":"A-LNYMfaT32iYvn-XJTpaA","title":"Third-Party APIs","dateStarted":"2011-01-01","slug":"third-party-apis","isFeatured":false,"body":"

Extensive experience leveraging third-party API's to build out functionality faster and cheaper than building in-house, depending on the problem and client's budget. I often leverage third-party API's for the following (but not limited to):

\n"},{"id":"C3opNIQuSuGOYWKWZt_o3w","title":"Firebase","dateStarted":"2014-01-01","slug":"firebase","isFeatured":false,"body":"

Experience building with, and helping companies migrate away from a variety of Firebase products, including but not limited to AppEngine, Functions, Authentication, Storage, Dynamic Links, Cloud Messaging, Realtime Database, Firestore, Analytics, App Distribution, Crashlytics, and setting up local emulation of Firebase infrastructure to speed up development.

"}]},{"id":"fNaDxi7bTe6kJ_Ta_GVNPQ","title":"Back-end Development","body":"

I do back-end development in a variety of programming languages and frameworks depending on the task and team.

\n

These days I primarily do back-end development with Ruby on Rails, Node.js, Kotlin, Java and Go lang, but have also developed back-end applications using Rust, PHP, and Python.

\n

I started my career doing back-end development with PHP and MySQL, building out dynamic custom websites backed by content management systems that are easy for non-technical users to maintain with WordPress, Drupal and ProcessWire. Then, I shifted to doing back-end development with Node.js, and Ruby on Rails with PostGres. I also have experience doing back-end development in Java and Kotlin.

\n

When appropriate, I reach for no-SQL databases/datastores like MongoDB, and have worked with Firebase datastores like Firestore and Firebase Realtime Database.

\n

Another great tool I reach for is Redis to improve networking performance via caching, as well as create real-time user experiences with Redis streams and Pub/Sub.

\n

For my personal back-end APIs, and productivity tools that require back-end development, I tend to develop these tools using Ruby on Rails, Node.js with TypeScript, and the Kotlin and Go lang programming languages, and usually tend to prefer SQL databases like PostGres, SQLite, and MySQL.

\n

I often use test-driven development when doing back-end development to help speed up the implementation and increase confidence in the code.

\n

I have done a variety of back-end development work:

\n\n

I build greenfield projects from scratch to help new companies launch their MVPs, as well as work with established and mature companies, codebases, and larger teams to build new features, fix complicated bugs, optimize the performance of their existing and slow back-ends, and help overcome years of tech debt. 

\n

Sometimes I inherit complex projects that the previous team failed to deliver, which sometimes require me to redesign parts of the system and rewrite key parts of the existing back-ends.

\n

I have worked with many other programming languages and frameworks, not just the ones listed above. Read more about the technologies I've worked with.

\n

I can augment your existing team to provide that back-end development expertise and guidance your team may be lacking, or work alongside your team of experts the way they prefer to work to help them power through a big project. I'm a full stack web and mobile developer based in Canada, and I work with teams locally and internationally. If you'd like to work together, feel free to contact me.

","slug":"back-end-development","publishedAt":"2024-06-08T19:25:28+01:00","summary":"

I do back-end development and develop REST API's, micro-services, and GraphQL API's backed by databases.

\n

I tend to primarily do back-end development in Ruby on Rails, Node.js, Kotlin, Java, and Go lang.

\n

For databases I work with both SQL and no-SQL databases, including PostGres, MySQL, SQLite, MongoDB, and Redis.

","excerpt":"Expertise in back-end development, REST API's, microservices, and SQL and no-SQL databases in Canada","technologies":[{"id":"CMUQ0-fERMKjfuLVXTlupw","title":"JavaScript / TypeScript","dateStarted":"2011-07-04","slug":"javascript","isFeatured":true,"body":"

Building interactive web applications with JavaScript and TypeScript.

\n"},{"id":"b-XMVdolTGO36WJkqmAagA","title":"Ruby and Ruby on Rails","dateStarted":"2017-01-01","slug":"ruby-on-rails","isFeatured":true,"body":"

Extensive experience working with Ruby on Rails to build API's, and limited experience building server-rendered apps.

\n"},{"id":"BIe5HX70SbCdP-6YuCQ8cw","title":"Go lang","dateStarted":"2023-03-03","slug":"go-lang","isFeatured":true,"body":"

I build backend web services and cross-platform command line interfaces (CLI tools) in the Go programming language for macOS, Linux, and Windows.

\n"},{"id":"J9wrx88dR-qK0mB7qOAAcg","title":"Kotlin and Java","dateStarted":"2014-03-10","slug":"kotlin-java","isFeatured":true,"body":"

I have extensive experience in Kotlin and Java, building native Android apps in both languages, as well as backend web API's. The capacity at which I work with Kotlin and Java at companies includes either Tech Lead roles, or as the resident Java/Kotlin expert on smaller teams.

\n\n

Experience working with the Kotlin programming language in a variety of contexts including backend development with Ktor as well as Kotlin Multiplatform Mobile.

\n"},{"id":"V0CRljSPQFyQmtNWNO5vzQ","title":"Next.js","dateStarted":"2020-03-01","slug":"nextjs","isFeatured":false,"body":"

Building robust applications in Next.js with TypeScript that support either Static Site Generation (SSG) or Server-Side Rendering (SSR) depending on the problem.

\n\n

As Next.js is a framework that is built on top of React, all React skills apply to Next.js.

"},{"id":"bGDIK2_BRUWq_JUs3Vx_kA","title":"Node.js","dateStarted":"2014-03-10","slug":"nodejs","isFeatured":true,"body":"

Extensive experience building backend API's in JavaScript and TypeScript.

\n"},{"id":"cySbOyKBSS-QdfhdY5wObw","title":"SQL","dateStarted":"2006-01-01","slug":"sql","isFeatured":true,"body":"

Extensive experience working with Postgres, MySQL, and SQLite both on the back-end and front-end, including migrations.

\n"},{"id":"I_Kp0ssIRn6qtQWemUceIQ","title":"Rust","dateStarted":"2022-10-01","slug":"rust","isFeatured":false,"body":"

I have experience building CLI tools and web apps in Rust with various libraries:

\n"},{"id":"XUSxlF63S42qNqnWZQSeaw","title":"Redis","dateStarted":"2017-07-03","slug":"redis","isFeatured":false,"body":"

Experience working with Redis for a variety of applications including caching, key-value storage, asynchronous worker tasks, as well as building event-driven, real-time applications.

\n"},{"id":"C3opNIQuSuGOYWKWZt_o3w","title":"Firebase","dateStarted":"2014-01-01","slug":"firebase","isFeatured":false,"body":"

Experience building with, and helping companies migrate away from a variety of Firebase products, including but not limited to AppEngine, Functions, Authentication, Storage, Dynamic Links, Cloud Messaging, Realtime Database, Firestore, Analytics, App Distribution, Crashlytics, and setting up local emulation of Firebase infrastructure to speed up development.

"},{"id":"esQaGxr2QqKxWEGnfp2uww","title":"MongoDB","dateStarted":"2014-01-01","slug":"mongodb","isFeatured":false,"body":"

Using MongoDB for storing data that needs more flexibility with regards to its schema.

\n

Leveraging MongoDB geospatial queries to power location-related services in API's I build, including \"near me within X kilometres\" functionality.

"},{"id":"A-LNYMfaT32iYvn-XJTpaA","title":"Third-Party APIs","dateStarted":"2011-01-01","slug":"third-party-apis","isFeatured":false,"body":"

Extensive experience leveraging third-party API's to build out functionality faster and cheaper than building in-house, depending on the problem and client's budget. I often leverage third-party API's for the following (but not limited to):

\n"},{"id":"T-kvThB8RiiYukiEpeUy_w","title":"PHP","dateStarted":"2006-01-01","slug":"php","isFeatured":false,"body":"

Experience in Drupal, WordPress, ProcessWire, and vanilla PHP to build websites for clients and internal tooling.

\n"},{"id":"X7uzXHelR_epYPU3rOvTmg","title":"Web Hosting & Infrastructure","dateStarted":"2002-01-01","slug":"web-hosting-infrastructure","isFeatured":false,"body":"

I have extensive experience working with a variety of hosting providers including but not limited to Amazon Web Services, Google Cloud Platform, Firebase, Heroku, Digital Ocean, shared hosting providers, Vercel, and Netlify.

\n

I can work with infrastructure-as-a-service providers as well as provision bare metal servers, if needed.

\n

I also automate deployment processes for this infrastructure.

\n

I can work with Docker as a consumer as well as to Dockerize applications (Node.js, Ruby on Rails).

\n

I also have experience using Vagrant to enable local development for LAMP stack environments.

\n

Limited experience with Ansible.

"}]},{"id":"FwRgbNQeSWyp22ogdXYGwA","title":"Mobile Development","body":"

Since the mid 2010s I've been doing mobile development in various technologies including native Android, native iOS, Cordova/PhoneGap, Ionic, Kotlin Multiplatform, and React Native. The apps I have helped build are in the hands of millions of users worldwide.

\n

I started my career in mobile web development working on the Bitstrips app, and then native mobile app development for Android in Java and iOS in Objective-C when working on the Bitmoji app. Since then I've learned the more modern programming languages Swift (iOS) and Kotlin (Android) to help speed up native mobile app development.

\n

As a full stack web and mobile app developer, I have the expertise to implement the features every mobile app needs end-to-end:

\n\n

As well as building for native mobile, I also work with cross-platform technologies like Kotlin Multiplatform Mobile (KMM), Cordova/PhoneGap, Ionic, and React Native (including building React Native plugins), and have some experience with Flutter.

\n

I have developed various things on mobile:

\n\n

For iOS specifically:

\n\n

For Android specifically:

\n\n

Read more about my Android experience.

\n

Some example mobile projects I've worked on:

\n\n

I can augment your existing team to provide that mobile app development expertise and guidance your team may be lacking, or work alongside your team of experts the way they prefer to work to help them power through a big project. I'm a full stack web and mobile developer based in Canada, with significant experience in iOS and expertise in Android, and I work with teams locally and internationally to help them write software. If you'd like to work together, contact me.

","slug":"mobile-development-android-ios","publishedAt":"2024-06-08T19:34:16+01:00","summary":"

I build native and cross-platform mobile apps in various technologies.

\n

As a full stack web and mobile developer, I have the expertise to implement the features every mobile app needs end-to-end.

\n

Whether your goal is to ship a prototype quickly, or you've already validated your idea and need to build something performant with a strong foundation, I can help.

\n

Whether you prefer to build separate native applications, or leverage cross-platform frameworks to build once and deploy everywhere, I can help.

","excerpt":"Native Android Mobile app developer and cross-platform mobile app developer using React Native and Kotlin Multiplatform Mobile (KMM) in Canada","technologies":[{"id":"CMUQ0-fERMKjfuLVXTlupw","title":"JavaScript / TypeScript","dateStarted":"2011-07-04","slug":"javascript","isFeatured":true,"body":"

Building interactive web applications with JavaScript and TypeScript.

\n"},{"id":"a6q0Ky2KTQSL2iiGayT1VQ","title":"CSS","dateStarted":"2001-01-01","slug":"css","isFeatured":false,"body":"

Extensive expertise with CSS including SCSS, Less, Stylus and Styled Components syntaxes to build scalable and maintainable CSS.

\n"},{"id":"WtnEHGWER5eoDM5bCD4xpA","title":"HTML","dateStarted":"2002-01-01","slug":"html","isFeatured":false,"body":"

Extensive experience with HTML since the early 2000's and how to use HTML and CSS features to improve the performance of JavaScript applications.

\n"},{"id":"Dy7Q4uWnRGi38DenWNnT9g","title":"Android","dateStarted":"2014-03-10","slug":"android","isFeatured":true,"body":"

Native Android development in Kotlin and Java.

\n"},{"id":"JLOItIWdTVaqtDh6CEJdCw","title":"iOS","dateStarted":"2014-03-10","slug":"ios","isFeatured":true,"body":"

UIKit and SwiftUI experience in Swift and Objective-C as well as multiplatform technologies.

\n"},{"id":"J9wrx88dR-qK0mB7qOAAcg","title":"Kotlin and Java","dateStarted":"2014-03-10","slug":"kotlin-java","isFeatured":true,"body":"

I have extensive experience in Kotlin and Java, building native Android apps in both languages, as well as backend web API's. The capacity at which I work with Kotlin and Java at companies includes either Tech Lead roles, or as the resident Java/Kotlin expert on smaller teams.

\n\n

Experience working with the Kotlin programming language in a variety of contexts including backend development with Ktor as well as Kotlin Multiplatform Mobile.

\n"},{"id":"cySbOyKBSS-QdfhdY5wObw","title":"SQL","dateStarted":"2006-01-01","slug":"sql","isFeatured":true,"body":"

Extensive experience working with Postgres, MySQL, and SQLite both on the back-end and front-end, including migrations.

\n"},{"id":"eLowcTa0SGu6S1ILbOAXAA","title":"React Native","dateStarted":"2018-01-01","slug":"react-native","isFeatured":false,"body":"

Experience working with React Native to build new apps, maintain existing apps, and migrate away from React Native.

\n\n

As React Native is a framework that is built on top of React, all React skills apply to React Native.

"},{"id":"I_Kp0ssIRn6qtQWemUceIQ","title":"Rust","dateStarted":"2022-10-01","slug":"rust","isFeatured":false,"body":"

I have experience building CLI tools and web apps in Rust with various libraries:

\n"},{"id":"C3opNIQuSuGOYWKWZt_o3w","title":"Firebase","dateStarted":"2014-01-01","slug":"firebase","isFeatured":false,"body":"

Experience building with, and helping companies migrate away from a variety of Firebase products, including but not limited to AppEngine, Functions, Authentication, Storage, Dynamic Links, Cloud Messaging, Realtime Database, Firestore, Analytics, App Distribution, Crashlytics, and setting up local emulation of Firebase infrastructure to speed up development.

"},{"id":"A-LNYMfaT32iYvn-XJTpaA","title":"Third-Party APIs","dateStarted":"2011-01-01","slug":"third-party-apis","isFeatured":false,"body":"

Extensive experience leveraging third-party API's to build out functionality faster and cheaper than building in-house, depending on the problem and client's budget. I often leverage third-party API's for the following (but not limited to):

\n"},{"id":"Miux1N0XTXin8_meMZw7dQ","title":"Realm database (Atlas Device SDK)","dateStarted":"2023-01-01","slug":"realm-database-atlas-device-sdk-mongodb","isFeatured":false,"body":"

Realm database (now known as Atlas Device SDK), is a cross-platform object database that is used on Android and iOS, among other platforms.

\n

I have experience working with Realm on Android.

"}]},{"id":"diWbtjBUR1uhSNFbUsSn7g","title":"Technical Leadership","body":"

As a tech lead, I like to set my team up for success by setting up a solid codebase and all the automated processes the team needs from the start so they can focus on building.

\n

I meet with stakeholders to gather a thorough understanding of the stakeholders' goals and priorities, which helps influence which technologies to choose.

\n

After choosing appropriate technologies for the job, I set up the codebases with CI/CD pipelines for testing and deployments, as well as linting and other automated tasks. This allows me and my team to focus on building rather than chore-related tasks.

\n

To support my team I like to write extensive documentation that is easy to follow including style guides and the occasional instructional tutorial when appropriate. I like to provide style guides for all languages used, code examples, and design systems to support developers of all experience levels. I also make myself available to team members for mentorship including doing pair programming with peers and juniors, and running workshops to grow the team.

\n

I like to communicate transparently and frequently in Slack, documentation, and meetings so that stakeholders are never left in the dark with regards to status on a project.

\n

When it comes to building teams, I try to source as fairly as possible and include applications from developers from both traditional and non-traditional backgrounds, as well as use structure assessment practices to fairly assess candidates abilities rather than go by gut feeling which can lead to bias in the interview process.

\n

I prioritize building the right organization framework and processes up front to create a supportive, healthy environment so teams can do their best work. My primary goals are to increase productivity so that team members feel empowered to contribute code and opinions, have a sense of ownership, and are motivated to ship quickly, and avoid scenarios that can introduce conflict and leave engineers feeling unmotivated.

\n

When building teams, I put a strong emphasis on Diversity, Equity and Inclusion, and prefer working with companies with the same values, or at least those that demonstrate that they're willing to grow in that area.

\n

If this sounds like a good fit for your engineering organization and you think you may like to work with me, please feel free to contact me.

","slug":"tech-lead","publishedAt":"2024-06-09T00:44:05+01:00","summary":"

As a technical leader, I aim to set up full-stack web and mobile software development teams for success.

\n

I believe the right tools and automated processes in place, a healthy risk-free environment where devs can communicate and disagree, transparent communication, documentation, and a diverse group of individuals on the team to get a diverse set of opinions and influences all help build successful teams.

","excerpt":"Full Stack Developer, Mobile Developer, Tech lead in Canada","technologies":[{"id":"b-XMVdolTGO36WJkqmAagA","title":"Ruby and Ruby on Rails","dateStarted":"2017-01-01","slug":"ruby-on-rails","isFeatured":true,"body":"

Extensive experience working with Ruby on Rails to build API's, and limited experience building server-rendered apps.

\n"},{"id":"CMUQ0-fERMKjfuLVXTlupw","title":"JavaScript / TypeScript","dateStarted":"2011-07-04","slug":"javascript","isFeatured":true,"body":"

Building interactive web applications with JavaScript and TypeScript.

\n"},{"id":"a6q0Ky2KTQSL2iiGayT1VQ","title":"CSS","dateStarted":"2001-01-01","slug":"css","isFeatured":false,"body":"

Extensive expertise with CSS including SCSS, Less, Stylus and Styled Components syntaxes to build scalable and maintainable CSS.

\n"},{"id":"WtnEHGWER5eoDM5bCD4xpA","title":"HTML","dateStarted":"2002-01-01","slug":"html","isFeatured":false,"body":"

Extensive experience with HTML since the early 2000's and how to use HTML and CSS features to improve the performance of JavaScript applications.

\n"},{"id":"Dy7Q4uWnRGi38DenWNnT9g","title":"Android","dateStarted":"2014-03-10","slug":"android","isFeatured":true,"body":"

Native Android development in Kotlin and Java.

\n"},{"id":"eLowcTa0SGu6S1ILbOAXAA","title":"React Native","dateStarted":"2018-01-01","slug":"react-native","isFeatured":false,"body":"

Experience working with React Native to build new apps, maintain existing apps, and migrate away from React Native.

\n\n

As React Native is a framework that is built on top of React, all React skills apply to React Native.

"}]},{"id":"ReYjGB9iTaGyauiTrd1ulA","title":"Software System Design","body":"

As a full stack web and mobile developer, I have been designing and developing software for web and mobile since the early and mid 2010s.

\n

I design systems based on your team's short-term and long-term goals.

\n

I work with new companies on a limited budget to design software to help them get to market as soon as possible. 

\n

I work with mature companies to help them redesign and rewrite their existing software, and help them solve problems where their current solution falls short, as well as migrate from expensive technologies that made sense to choose at the start but don't scale financially with the current load on their systems.

\n

Back-end programming languages, web technologies, single page apps or server-rendered apps, micro-services or monoliths, serverless or servers, SQL or no-SQL, native desktop or mobile apps or cross-platform solutions—there are many decisions to make when it comes to the system design of a product. There is no single right answer, and no silver bullet programming language or framework. I help you design a system based on your unique situation, what's important to you, and your priorities and goals.

\n

I can augment your existing team to provide that system design expertise and guidance your team may be lacking, or work alongside your team of experts the way they prefer to work to help them power through a big project. I'm a full stack web and mobile developer based in Canada, and I work with teams locally and internationally to help them write software. If you'd like to work together, feel free to contact me.

","slug":"software-system-design","publishedAt":"2024-06-08T19:36:22+01:00","summary":"

How a software system is designed will have an impact on how well it can be maintained and built on, and how fast your team can ship. Let me help you build a solid foundation for your software.

\n

Maybe you've asked yourself: Which back-end language or framework should I use? Should I do native apps or go cross-platform? Should I use an expensive off-the-shelf product or build my own? What kind of database should I use? 

\n

If you’re looking to develop a product, I’m here to help you make the right technical decisions for you from start to finish.

","excerpt":"Expertise in system design and back-end development in Canada","technologies":[{"id":"CMUQ0-fERMKjfuLVXTlupw","title":"JavaScript / TypeScript","dateStarted":"2011-07-04","slug":"javascript","isFeatured":true,"body":"

Building interactive web applications with JavaScript and TypeScript.

\n"},{"id":"b-XMVdolTGO36WJkqmAagA","title":"Ruby and Ruby on Rails","dateStarted":"2017-01-01","slug":"ruby-on-rails","isFeatured":true,"body":"

Extensive experience working with Ruby on Rails to build API's, and limited experience building server-rendered apps.

\n"},{"id":"Hs3H47U1ReiJZpmu0wO5Lg","title":"React","dateStarted":"2014-03-10","slug":"react","isFeatured":true,"body":"

A library for building complex single page applications in JavaScript and TypeScript. I have been working with React since 2014.

\n"},{"id":"Dy7Q4uWnRGi38DenWNnT9g","title":"Android","dateStarted":"2014-03-10","slug":"android","isFeatured":true,"body":"

Native Android development in Kotlin and Java.

\n"},{"id":"BIe5HX70SbCdP-6YuCQ8cw","title":"Go lang","dateStarted":"2023-03-03","slug":"go-lang","isFeatured":true,"body":"

I build backend web services and cross-platform command line interfaces (CLI tools) in the Go programming language for macOS, Linux, and Windows.

\n"},{"id":"J9wrx88dR-qK0mB7qOAAcg","title":"Kotlin and Java","dateStarted":"2014-03-10","slug":"kotlin-java","isFeatured":true,"body":"

I have extensive experience in Kotlin and Java, building native Android apps in both languages, as well as backend web API's. The capacity at which I work with Kotlin and Java at companies includes either Tech Lead roles, or as the resident Java/Kotlin expert on smaller teams.

\n\n

Experience working with the Kotlin programming language in a variety of contexts including backend development with Ktor as well as Kotlin Multiplatform Mobile.

\n"},{"id":"bGDIK2_BRUWq_JUs3Vx_kA","title":"Node.js","dateStarted":"2014-03-10","slug":"nodejs","isFeatured":true,"body":"

Extensive experience building backend API's in JavaScript and TypeScript.

\n"},{"id":"cySbOyKBSS-QdfhdY5wObw","title":"SQL","dateStarted":"2006-01-01","slug":"sql","isFeatured":true,"body":"

Extensive experience working with Postgres, MySQL, and SQLite both on the back-end and front-end, including migrations.

\n"},{"id":"eLowcTa0SGu6S1ILbOAXAA","title":"React Native","dateStarted":"2018-01-01","slug":"react-native","isFeatured":false,"body":"

Experience working with React Native to build new apps, maintain existing apps, and migrate away from React Native.

\n\n

As React Native is a framework that is built on top of React, all React skills apply to React Native.

"},{"id":"I_Kp0ssIRn6qtQWemUceIQ","title":"Rust","dateStarted":"2022-10-01","slug":"rust","isFeatured":false,"body":"

I have experience building CLI tools and web apps in Rust with various libraries:

\n"},{"id":"C3opNIQuSuGOYWKWZt_o3w","title":"Firebase","dateStarted":"2014-01-01","slug":"firebase","isFeatured":false,"body":"

Experience building with, and helping companies migrate away from a variety of Firebase products, including but not limited to AppEngine, Functions, Authentication, Storage, Dynamic Links, Cloud Messaging, Realtime Database, Firestore, Analytics, App Distribution, Crashlytics, and setting up local emulation of Firebase infrastructure to speed up development.

"},{"id":"esQaGxr2QqKxWEGnfp2uww","title":"MongoDB","dateStarted":"2014-01-01","slug":"mongodb","isFeatured":false,"body":"

Using MongoDB for storing data that needs more flexibility with regards to its schema.

\n

Leveraging MongoDB geospatial queries to power location-related services in API's I build, including \"near me within X kilometres\" functionality.

"},{"id":"X7uzXHelR_epYPU3rOvTmg","title":"Web Hosting & Infrastructure","dateStarted":"2002-01-01","slug":"web-hosting-infrastructure","isFeatured":false,"body":"

I have extensive experience working with a variety of hosting providers including but not limited to Amazon Web Services, Google Cloud Platform, Firebase, Heroku, Digital Ocean, shared hosting providers, Vercel, and Netlify.

\n

I can work with infrastructure-as-a-service providers as well as provision bare metal servers, if needed.

\n

I also automate deployment processes for this infrastructure.

\n

I can work with Docker as a consumer as well as to Dockerize applications (Node.js, Ruby on Rails).

\n

I also have experience using Vagrant to enable local development for LAMP stack environments.

\n

Limited experience with Ansible.

"}]},{"id":"WGJkVMylSuu3gxlaaIm2ng","title":"Content Management","body":"

I build websites and apps that users can manage themselves.

\n

I enable my clients to manage the content on the websites and mobile apps I build them by leveraging open-source content management systems like Strapi, WordPress, Drupal, and ProcessWire.

\n

I also work with cloud-based and headless content management systems like Dato CMS, Contentful, Airtable, and Strapi, among others, as well as no-code and low-code platforms like Retool.

\n

I have been building with content management systems since the early 2000s and use CMS technologies to manage the content of my own websites. All of the content on this website is managed by a content management system.

\n

I also build custom plugins to enhance functionality when the existing plugin ecosystem doesn't have something that can solve the problem.

\n

A content management system solution might make sense for you in the following cases:

\n\n

I can augment your existing team to provide that content management system expertise and guidance your team may be lacking, or work alongside your team of experts the way they prefer to work to help them power through a big project. I'm a full stack web and mobile developer based in Canada, and I work with teams locally and internationally. If you'd like to work together, feel free to contact me.

","slug":"content-management-system-cms","publishedAt":"2024-06-18T01:21:56+01:00","summary":"
\n
\n
\n

I build websites that are easy for clients to add to, update, and manage themselves.

\n

I leverage the power of community-supported systems and frameworks to empower my clients to manage their own content. I also work with cloud-based platforms for faster development.

\n

I also build custom tools for managing content when appropriate.

\n
\n
\n
","excerpt":"Expertise in back-end development and content management systems like WordPress, Drupal, and ProcessWire in Canada","technologies":[{"id":"A_ctgnzGT2iojXzB3sHoMQ","title":"ProcessWire","dateStarted":"2010-01-01","slug":"processwire","isFeatured":false,"body":"

ProcessWire is a great, light-weight, easy-to-use PHP-based content management system. It's lesser known than Drupal and WordPress and definitely doesn't get the recognition it deserves, but it's a great alternative to these technologies. In my opinion, it's easier to use than both, and offers more flexibility than WordPress for custom content types, and is generally much simpler to theme for compared to Drupal. ProcessWire is quite mature, having been around for almost 2 decades, and is a great choice for my clients who want to update the content on their website.

"},{"id":"HkURgjq1SlqPlMtpglyr8w","title":"Drupal","dateStarted":"2013-01-01","slug":"drupal","isFeatured":false,"body":"

Drupal is a PHP-based content management system that is often leveraged for larger content sites. I have expertise in Drupal theme development.

"},{"id":"SpFXoxroQN-Av5QMtfQRWw","title":"WordPress","dateStarted":"2006-01-01","slug":"wordpress","isFeatured":false,"body":"

WordPress is a powerful blogging engine that can also be used as a content management system for server-rendered apps, as well as a headless CMS for more modern front-ends like staticallyl generated websites (SSG) with technologies like Next.js and Vue.js.

"},{"id":"QOca5iteQ_25qpaHYPS76Q","title":"Strapi","dateStarted":"2020-03-01","slug":"strapi","isFeatured":false,"body":"

Strapi is a Node.js-based headless content management system. It has a slick admin dashboard that is quick and enjoyable to use as a content creator.

\n

Strapi has a well-documented plugin development API, making it easier for developers to inject UI elements into the default CMS to extend functionality, for example, generating PDF's from content.

\n

I use Strapi to build content-focused websites and internal tools, including my own invoice management software.

\n

One of the benefits to Strapi over more traditional PHP-based content management systems is that it can be hosted on ephemeral infrastructure-as-a-service platforms.

"},{"id":"A-LNYMfaT32iYvn-XJTpaA","title":"Third-Party APIs","dateStarted":"2011-01-01","slug":"third-party-apis","isFeatured":false,"body":"

Extensive experience leveraging third-party API's to build out functionality faster and cheaper than building in-house, depending on the problem and client's budget. I often leverage third-party API's for the following (but not limited to):

\n"},{"id":"KJwwgup6R6ikInOQDb0SVg","title":"Low Code tools","dateStarted":"2019-01-01","slug":"low-code-retool","isFeatured":false,"body":"

Sometimes it makes sense to use a low-code/no-code platform to build internal tools. These can be cloud-based or self-hosted.

\n

Low-code tools help you save development time and are great for a variety of tasks:

\n\n

Low-code tools I primarily work with include Metabase and Retool, but I'd be happy to help out if your team has a different preferred option.

"}]},{"id":"NitVcTZbRYGZsPwePc_sfA","title":"Accessibility","body":"

Since the early 2010s I've been developing websites with a focus on accessibility. Early in my careeer, I worked on projects for not-for-profits that were government funded, and one of the requirements of receiving the funding was to ensure that the websites passed the strict accessibility requirements set out by the provincial and federal governments, which at the time meant that it needed to meet the Web Content Accessibility Guidelines (WCAG 2.0) for AAA compliance, the Accessibility for Ontarians with Disabilities Act (AODA), and had to be compatible with Internet Explorer 6.

\n

There are various ways to support accessibility, including graceful degradation and progressive enhancement, as well as providing alternative more accessible formats for content.

\n

While financial service and higher-education companies have stricter accessibility requirements, caring about accessibility can help all companies make their software easier to use and their content easier to consume.

\n

If your business has a requirement to conform to strict accessibility standards, or you just want to make your software and content accessible to as many people as possible, I can help with that. I can augment your existing team to provide that accessibility expertise and guidance your team may be lacking, or work alongside your team of experts the way they prefer to work to help them power through a big project.

\n

Contact me if you're interested in working together.

","slug":"accessibility","publishedAt":"2024-06-08T19:52:19+01:00","summary":"

I make websites and mobile apps for people regardless of technology and ability, and can create accessible, enjoyable digital experiences for users of all abilities.

\n

I can provide accessibility consulting and development as per the Web Content Accessibility Guidelines and other guidelines.

\n

Early in my career I worked on projects with strict accessibility requirements, and since then accessibility has always been top of mind for me.

","excerpt":"Accessibility consultant and expert in Canada (WCAG, AODA, etc.)","technologies":[{"id":"WtnEHGWER5eoDM5bCD4xpA","title":"HTML","dateStarted":"2002-01-01","slug":"html","isFeatured":false,"body":"

Extensive experience with HTML since the early 2000's and how to use HTML and CSS features to improve the performance of JavaScript applications.

\n"},{"id":"a6q0Ky2KTQSL2iiGayT1VQ","title":"CSS","dateStarted":"2001-01-01","slug":"css","isFeatured":false,"body":"

Extensive expertise with CSS including SCSS, Less, Stylus and Styled Components syntaxes to build scalable and maintainable CSS.

\n"},{"id":"CMUQ0-fERMKjfuLVXTlupw","title":"JavaScript / TypeScript","dateStarted":"2011-07-04","slug":"javascript","isFeatured":true,"body":"

Building interactive web applications with JavaScript and TypeScript.

\n"},{"id":"Dy7Q4uWnRGi38DenWNnT9g","title":"Android","dateStarted":"2014-03-10","slug":"android","isFeatured":true,"body":"

Native Android development in Kotlin and Java.

\n"},{"id":"JLOItIWdTVaqtDh6CEJdCw","title":"iOS","dateStarted":"2014-03-10","slug":"ios","isFeatured":true,"body":"

UIKit and SwiftUI experience in Swift and Objective-C as well as multiplatform technologies.

\n"}]}],"featuredTechnologies":[{"id":"CMUQ0-fERMKjfuLVXTlupw","title":"JavaScript / TypeScript","dateStarted":"2011-07-04","slug":"javascript","isFeatured":true,"body":"

Building interactive web applications with JavaScript and TypeScript.

\n"},{"id":"b-XMVdolTGO36WJkqmAagA","title":"Ruby and Ruby on Rails","dateStarted":"2017-01-01","slug":"ruby-on-rails","isFeatured":true,"body":"

Extensive experience working with Ruby on Rails to build API's, and limited experience building server-rendered apps.

\n"},{"id":"Hs3H47U1ReiJZpmu0wO5Lg","title":"React","dateStarted":"2014-03-10","slug":"react","isFeatured":true,"body":"

A library for building complex single page applications in JavaScript and TypeScript. I have been working with React since 2014.

\n"},{"id":"Dy7Q4uWnRGi38DenWNnT9g","title":"Android","dateStarted":"2014-03-10","slug":"android","isFeatured":true,"body":"

Native Android development in Kotlin and Java.

\n"},{"id":"JLOItIWdTVaqtDh6CEJdCw","title":"iOS","dateStarted":"2014-03-10","slug":"ios","isFeatured":true,"body":"

UIKit and SwiftUI experience in Swift and Objective-C as well as multiplatform technologies.

\n"},{"id":"BIe5HX70SbCdP-6YuCQ8cw","title":"Go lang","dateStarted":"2023-03-03","slug":"go-lang","isFeatured":true,"body":"

I build backend web services and cross-platform command line interfaces (CLI tools) in the Go programming language for macOS, Linux, and Windows.

\n"},{"id":"J9wrx88dR-qK0mB7qOAAcg","title":"Kotlin and Java","dateStarted":"2014-03-10","slug":"kotlin-java","isFeatured":true,"body":"

I have extensive experience in Kotlin and Java, building native Android apps in both languages, as well as backend web API's. The capacity at which I work with Kotlin and Java at companies includes either Tech Lead roles, or as the resident Java/Kotlin expert on smaller teams.

\n\n

Experience working with the Kotlin programming language in a variety of contexts including backend development with Ktor as well as Kotlin Multiplatform Mobile.

\n"},{"id":"bGDIK2_BRUWq_JUs3Vx_kA","title":"Node.js","dateStarted":"2014-03-10","slug":"nodejs","isFeatured":true,"body":"

Extensive experience building backend API's in JavaScript and TypeScript.

\n"},{"id":"cySbOyKBSS-QdfhdY5wObw","title":"SQL","dateStarted":"2006-01-01","slug":"sql","isFeatured":true,"body":"

Extensive experience working with Postgres, MySQL, and SQLite both on the back-end and front-end, including migrations.

\n"}]}},"__N_SSG":true}