56,966 blogs · [ { "id": "01a08c58-647e-7122-81f5-5464af7590c0", "title": "Rolling Your Own Node.js Continuous Deployment on Linux", "url": "https://travishorn.com/rolling-your-own-nodejs-continuous-deployment-on-linux/", "published_at": "2026-05-05T11:00:00+00:00" }, { "id": "01a08c58-647e-7122-81f5-5464afaec08c", "title": "Finding Things Fast on the Command Line", "url": "https://travishorn.com/finding-things-fast-on-the-command-line/", "published_at": "2026-04-28T11:00:00+00:00" }, { "id": "01a08c58-647e-7122-81f5-5464afe52e87", "title": "Modular Configuration for Clean Upgrades", "url": "https://travishorn.com/modular-configuration-for-clean-upgrades/", "published_at": "2026-04-21T11:00:00+00:00" }, { "id": "01a08c58-647e-7122-81f5-5464b068e61f", "title": "Svelte Client-Side Rendering for Observable Plot Done Right", "url": "https://travishorn.com/svelte-client-side-rendering-for-observable-plot-done-right/", "published_at": "2026-04-14T11:00:00+00:00" }, { "id": "01a08c58-647e-7122-81f5-5464b16792b7", "title": "Keep Your Main Branch Stable with GitHub Flow", "url": "https://travishorn.com/keep-your-main-branch-stable-with-github-flow/", "published_at": "2026-04-08T13:00:00+00:00" }, { "id": "01a08c58-647e-7122-81f5-5464b19ca5e7", "title": "When to Use Flexbox Over CSS Grid", "url": "https://travishorn.com/when-to-use-flexbox-over-css-grid/", "published_at": "2026-03-31T11:00:00+00:00" }, { "id": "01a08c58-647e-7122-81f5-5464b1c38ad8", "title": "Building Accessibility into Web Apps", "url": "https://travishorn.com/building-accessibility-into-web-apps/", "published_at": "2026-03-24T11:00:00+00:00" }, { "id": "01a08c58-647e-7122-81f5-5464b222fd12", "title": "Switching to uv for Python Management", "url": "https://travishorn.com/switching-to-uv-for-python-management/", "published_at": "2026-03-10T11:00:00+00:00" }, { "id": "01a08c58-647e-7122-81f5-5464b2c2bd43", "title": "DuckDB Storage Showdown", "url": "https://travishorn.com/duckdb-storage-showdown/", "published_at": "2026-03-03T11:00:00+00:00" }, { "id": "01a08c58-647e-7122-81f5-5464b2ddc11f", "title": "Materialized Views for Less Downtime", "url": "https://travishorn.com/materialized-views-for-less-downtime/", "published_at": "2026-02-25T21:00:00+00:00" }, { "id": "01a08c58-647e-7122-81f5-5464b3d19c9a", "title": "A Hands-on Exploration of SQLite for Production", "url": "https://travishorn.com/a-hands-on-exploration-of-sqlite-for-production/", "published_at": "2026-02-17T11:00:00+00:00" }, { "id": "01a08c58-647e-7122-81f5-5464b42a7c0b", "title": "High Performance Data Visualization in the Browser with DuckDB and Parquet", "url": "https://travishorn.com/high-performance-data-visualization-in-the-browser-with-duckdb-and-parquet/", "published_at": "2026-02-10T11:00:00+00:00" }, { "id": "01a08c58-647e-7122-81f5-5464b4a07d5b", "title": "Syncing Across Tabs with BroadcastChannel", "url": "https://travishorn.com/syncing-across-tabs-with-broadcastchannel/", "published_at": "2026-02-04T11:00:00+00:00" }, { "id": "01a08c58-647e-7122-81f5-5464b50383cd", "title": "How I Used Spark Broadcast Joins to Speed Up Cross-Border Analysis", "url": "https://travishorn.com/how-i-used-spark-broadcast-joins-to-speed-up-cross-border-analysis/", "published_at": "2026-01-23T11:00:00+00:00" }, { "id": "01a08c58-647e-7122-81f5-5464b5f54fc5", "title": "Modeling a Multi-Currency Settlement Engine", "url": "https://travishorn.com/modeling-a-multi-currency-settlement-engine/", "published_at": "2026-01-20T11:00:00+00:00" }, { "id": "01a08c58-647e-7122-81f5-5464b6255c52", "title": "Refactoring Complex SQL to Reduce Query Time by 99%", "url": "https://travishorn.com/refactoring-complex-sql-to-reduce-query-time-by-99/", "published_at": "2026-01-17T20:30:00+00:00" }, { "id": "01a08c58-647e-7122-81f5-5464b685b254", "title": "Building an Enrollment Prediction System with Machine Learning", "url": "https://travishorn.com/building-an-enrollment-prediction-system-with-machine-learning/", "published_at": "2026-01-13T12:00:17+00:00" }, { "id": "01a08c58-647e-7122-81f5-5464b71b00dd", "title": "Zero Downtime: Setting up a 3-Node MariaDB Cluster", "url": "https://travishorn.com/zero-downtime-setting-up-a-3-node-mariadb-cluster/", "published_at": "2025-12-30T12:00:19+00:00" }, { "id": "01a08c58-647e-7122-81f5-5464b79371ba", "title": "Managing Geographic Zones with GeoJSON and MariaDB", "url": "https://travishorn.com/managing-geographic-zones-with-geojson-and-mariadb/", "published_at": "2025-12-23T12:00:12+00:00" }, { "id": "01a08c58-647e-7122-81f5-5464b7d09fe5", "title": "Why Apache is Returning 200 OK Instead of 304 Not Modified", "url": "https://travishorn.com/why-apache-is-returning-200-ok-instead-of-304-not-modified/", "published_at": "2025-12-16T11:00:00+00:00" }, { "id": "01a08c58-647e-7122-81f5-5464b88e8e84", "title": "A SQL Window Function Case Study", "url": "https://travishorn.com/a-sql-window-function-case-study/", "published_at": "2025-12-09T12:00:45+00:00" }, { "id": "01a08c58-647e-7122-81f5-5464b9847962", "title": "From Auto-Increments to UUID v7", "url": "https://travishorn.com/from-auto-increments-to-uuid-v7/", "published_at": "2025-11-25T11:00:00+00:00" }, { "id": "01a08c58-647e-7122-81f5-5464b9e62515", "title": "Data Types: Continuous, Discrete, and Related Categories", "url": "https://travishorn.com/data-types-continuous-discrete-and-related-categories/", "published_at": "2025-11-01T15:42:32+00:00" }, { "id": "01a08c58-647e-7122-81f5-5464baac50a7", "title": "Quick Git Fixes", "url": "https://travishorn.com/quick-git-fixes/", "published_at": "2025-09-10T11:00:27+00:00" }, { "id": "01a08c58-647e-7122-81f5-5464bba19b2c", "title": "Converting TSV to CSV with DuckDB", "url": "https://travishorn.com/converting-tsv-to-csv-with-duckdb/", "published_at": "2025-08-15T11:00:44+00:00" }, { "id": "01a08c58-647e-7122-81f5-5464bc27a40d", "title": "Why Open-Source Principles Aren't Always Obvious in Art", "url": "https://travishorn.com/why-open-source-principles-arent-always-obvious-in-art/", "published_at": "2025-07-15T11:00:11+00:00" }, { "id": "01a08c58-647e-7122-81f5-5464bd191f17", "title": "Data Analysis with Azure Machine Learning: Healthcare Data Demo", "url": "https://travishorn.com/data-analysis-with-azure-machine-learning-healthcare-data-demo/", "published_at": "2025-04-25T22:00:31+00:00" }, { "id": "01a08c58-647e-7122-81f5-5464bdefed1a", "title": "Real-Time Delivery ETA Prediction in Python", "url": "https://travishorn.com/real-time-delivery-eta-prediction-in-python/", "published_at": "2025-04-14T11:00:20+00:00" }, { "id": "01a08c58-647e-7122-81f5-5464beca71cb", "title": "Cursor Rules for SvelteKit Development", "url": "https://travishorn.com/cursor-rules-for-sveltekit-development/", "published_at": "2025-04-12T11:00:44+00:00" }, { "id": "01a08c58-647e-7122-81f5-5464becd45bc", "title": "Simple Python Dependency Management", "url": "https://travishorn.com/simple-python-dependency-management/", "published_at": "2024-10-07T21:28:02+00:00" }, { "id": "01a08c58-647e-7122-81f5-5464bf906b3c", "title": "Setting up a Project with ESLint and Prettier", "url": "https://travishorn.com/setting-up-a-project-with-eslint-and-prettier/", "published_at": "2024-08-01T12:48:55+00:00" }, { "id": "01a08c58-647e-7122-81f5-5464bfc0b3d1", "title": "Introducing libsql Migrate", "url": "https://travishorn.com/introducing-libsql-migrate/", "published_at": "2024-04-12T11:00:50+00:00" }, { "id": "01a08c58-647e-7122-81f5-5464c05f099a", "title": "Creating a Development Database: Syncing Production Data for Efficient Development", "url": "https://travishorn.com/creating-a-development-database-syncing-production-data-for-efficient-development/", "published_at": "2024-02-14T12:00:07+00:00" }, { "id": "01a08c58-647e-7122-81f5-5464c147d9e7", "title": "Monitoring your Linux Server with Prometheus", "url": "https://travishorn.com/monitoring-your-linux-server-with-prometheus/", "published_at": "2024-01-31T12:00:38+00:00" }, { "id": "01a08c58-647e-7122-81f5-5464c17116bc", "title": "Integrating SQL Data into your Next.js App", "url": "https://travishorn.com/integrating-sql-data-into-your-nextjs-app/", "published_at": "2024-01-17T12:00:19+00:00" }, { "id": "01a08c58-647e-7122-81f5-5464c1f0cc6c", "title": "Comprehensive Guide: Backing Up and Recovering Data in MariaDB", "url": "https://travishorn.com/comprehensive-guide-backing-up-and-recovering-data-in-mariadb/", "published_at": "2024-01-03T12:00:10+00:00" }, { "id": "01a08c58-647e-7122-81f5-5464c2dcd64b", "title": "Getting Started with MariaDB", "url": "https://travishorn.com/getting-started-with-mariadb/", "published_at": "2023-12-20T12:00:09+00:00" }, { "id": "01a08c58-647e-7122-81f5-5464c3c067fd", "title": "Configuring HTTPS/TLS on nginx: A Complete Guide for Securing Web Traffic", "url": "https://travishorn.com/configuring-httpstls-on-nginx-a-complete-guide-for-securing-web-traffic/", "published_at": "2023-12-06T12:00:12+00:00" }, { "id": "01a08c58-647e-7122-81f5-5464c4662cec", "title": "Firewall Configuration with nftables", "url": "https://travishorn.com/firewall-configuration-with-nftables/", "published_at": "2023-11-22T12:00:12+00:00" }, { "id": "01a08c58-647e-7122-81f5-5464c5643ae1", "title": "Reverse Proxying with nginx", "url": "https://travishorn.com/reverse-proxying-with-nginx/", "published_at": "2023-11-09T00:00:11+00:00" }, { "id": "01a08c58-647e-7122-81f5-5464c5cd5310", "title": "Rolling Your Own Continuous Deployment with Node.js, Git, PM2, and Linux", "url": "https://travishorn.com/rolling-your-own-continuous-deployment-with-nodejs-git-pm2-and-linux/", "published_at": "2023-10-25T11:00:12+00:00" }, { "id": "01a08c58-647e-7122-81f5-5464c696c100", "title": "SvelteKit Magic: Server-Side Rendering for Observable Plot Explained", "url": "https://travishorn.com/sveltekit-magic-server-side-rendering-for-observable-plot-explained/", "published_at": "2023-10-18T11:00:10+00:00" }, { "id": "01a08c58-647e-7122-81f5-5464c6cb1380", "title": "How to Manage Node.js Processes with PM2", "url": "https://travishorn.com/how-to-manage-nodejs-processes-with-pm2/", "published_at": "2023-10-11T11:00:09+00:00" }, { "id": "01a08c58-647e-7122-81f5-5464c70f0c3b", "title": "Serving Next.js Apps on your Linux Server", "url": "https://travishorn.com/serving-next-js-apps-on-your-linux-server/", "published_at": "2023-09-27T11:00:09+00:00" }, { "id": "01a08c58-647e-7122-81f5-5464c769fe65", "title": "The Simple Guide to Installing Node.js using APT and NodeSource", "url": "https://travishorn.com/the-simple-guide-to-installing-nodejs-using-apt-and-nodesource/", "published_at": "2023-09-13T11:00:09+00:00" }, { "id": "01a08c58-647e-7122-81f5-5464c8367553", "title": "Uploading and Saving Files with SvelteKit", "url": "https://travishorn.com/uploading-and-saving-files-with-sveltekit/", "published_at": "2023-09-08T15:16:21+00:00" }, { "id": "01a08c58-647e-7122-81f5-5464c8b0666a", "title": "Step-by-Step Guide: Setting Up a Git Repository Hosting Server", "url": "https://travishorn.com/step-by-step-guide-setting-up-a-git-repository-hosting-server/", "published_at": "2023-08-30T11:00:09+00:00" }, { "id": "01a08c58-647e-7122-81f5-5464c93a8a65", "title": "Streamline Your Linux Experience with Automatic Updates", "url": "https://travishorn.com/streamline-your-linux-experience-with-automatic-updates/", "published_at": "2023-08-16T11:00:08+00:00" }, { "id": "01a08c58-647e-7122-81f5-5464ca10bc0d", "title": "Unlocking the Power of Public Key Authentication in OpenSSH: A Comprehensive Guide", "url": "https://travishorn.com/unlocking-the-power-of-public-key-authentication-in-openssh-a-comprehensive-guide/", "published_at": "2023-08-02T11:00:09+00:00" }, { "id": "01a08c58-647e-7122-81f5-5464ca15c8e4", "title": "Mastering Port Forwarding in VirtualBox: Unlocking Connectivity", "url": "https://travishorn.com/mastering-port-forwarding-in-virtualbox-unlocking-connectivity/", "published_at": "2023-07-19T11:00:11+00:00" }, { "id": "01a08c58-647e-7122-81f5-5464ca621544", "title": "Introducing the Knex Adapter for Auth.js", "url": "https://travishorn.com/introducing-the-knex-adapter-for-authjs/", "published_at": "2023-07-05T12:00:39+00:00" }, { "id": "01a08c58-647e-7122-81f5-5464cb3d5718", "title": "Exploring the Power and Beauty of Common Lisp during the #12in23 Programming Challenge", "url": "https://travishorn.com/exploring-the-power-and-beauty-of-common-lisp-during-the-12in23-programming-challenge/", "published_at": "2023-06-15T18:47:31+00:00" }, { "id": "01a08c58-647e-7122-81f5-5464cc2c31bd", "title": "12 Months, 12 Languages: My Journey with the #12in23 Challenge - Mindshifting May with Prolog", "url": "https://travishorn.com/12-months-12-languages-my-journey-with-the-12in23-challenge-mindshifting-may-with-prolog/", "published_at": "2023-05-10T12:00:39+00:00" }, { "id": "01a08c58-647e-7122-81f5-5464cc41058e", "title": "Analytical April: Learning Python for Data Science", "url": "https://travishorn.com/analytical-april-learning-python-for-data-science/", "published_at": "2023-04-05T12:00:38+00:00" }, { "id": "01a08c58-647e-7122-81f5-5464ccdc764f", "title": "SurrealDB: Your Ultimate Guide to Smooth Installation and Configuration", "url": "https://travishorn.com/surrealdb-your-ultimate-guide-to-smooth-installation-and-configuration/", "published_at": "2023-03-29T13:00:39+00:00" }, { "id": "01a08c58-647e-7122-81f5-5464cd0f8df4", "title": "Conquering the #12in23 Challenge: Tackling Mechanical March with Rust", "url": "https://travishorn.com/conquering-the-12in23-challenge-tackling-mechanical-march-with-rust/", "published_at": "2023-03-07T20:01:40+00:00" }, { "id": "01a08c58-647e-7122-81f5-5464cd411c8f", "title": "Functional February: Exploring Elixir for Exercism's #12in23 Challenge", "url": "https://travishorn.com/functional-february-exploring-elixir-for-exercisms-12in23-challenge/", "published_at": "2023-02-08T13:29:32+00:00" }, { "id": "01a08c58-647e-7122-81f5-5464cd874b8b", "title": "Learn a New Programming Language Every Month with Exercism's #12in23 Challenge", "url": "https://travishorn.com/learn-a-new-programming-language-every-month-with-exercisms-12in23-challenge/", "published_at": "2023-01-18T02:31:03+00:00" }, { "id": "01a08c58-647e-7122-81f5-5464cdcb13ce", "title": "SQL Group with Most Recent Record Each", "url": "https://travishorn.com/sql-group-with-most-recent-record-each/", "published_at": "2022-04-27T23:29:01+00:00" }, { "id": "01a08c58-647e-7122-81f5-5464cdfc1bef", "title": "Building a Telegram Bot with Netlify", "url": "https://travishorn.com/building-a-telegram-bot-with-netlify/", "published_at": "2022-02-24T18:31:42+00:00" }, { "id": "01a08c58-647e-7122-81f5-5464ce8a18a8", "title": "Haskell Development on Windows", "url": "https://travishorn.com/haskell-development-on-windows/", "published_at": "2022-01-31T14:51:36+00:00" }, { "id": "01a08c58-647e-7122-81f5-5464cf323fd8", "title": "Vim on Arch", "url": "https://travishorn.com/vim-on-arch/", "published_at": "2022-01-24T14:21:21+00:00" }, { "id": "01a08c58-647e-7122-81f5-5464cf3ee8bf", "title": "xmobar", "url": "https://travishorn.com/xmobar/", "published_at": "2022-01-18T17:24:33+00:00" }, { "id": "01a08c58-647e-7122-81f5-5464d01882cd", "title": "Alacritty terminal emulator", "url": "https://travishorn.com/alacritty-terminal-emulator/", "published_at": "2022-01-10T19:03:57+00:00" }, { "id": "01a08c58-647e-7122-81f5-5464d0988414", "title": "The xmonad Window Manager on Arch Linux", "url": "https://travishorn.com/the-xmonad-window-manager-on-arch-linux/", "published_at": "2022-01-03T13:54:44+00:00" }, { "id": "01a08c58-647e-7122-81f5-5464d151f2f6", "title": "Installing Arch Linux", "url": "https://travishorn.com/installing-arch-linux/", "published_at": "2021-12-27T19:58:06+00:00" }, { "id": "01a08c58-647e-7122-81f5-5464d1ad0833", "title": "Reverse-Proxying Node.js Apps on Windows with IIS", "url": "https://travishorn.com/reverse-proxying-node-js-apps-on-windows-with-iis/", "published_at": "2021-04-02T11:03:35+00:00" }, { "id": "01a08c58-647e-7122-81f5-5464d1cb3362", "title": "Some ways to align the last row in a flexbox grid", "url": "https://travishorn.com/some-ways-to-align-the-last-row-in-a-flexbox-grid/", "published_at": "2021-03-18T11:03:35+00:00" }, { "id": "01a08c58-647e-7122-81f5-5464d28e1904", "title": "Excel Formula to Scale Data from 0 to 1", "url": "https://travishorn.com/excel-formula-to-scale-data-from-0-to-1/", "published_at": "2021-03-11T12:02:30+00:00" }, { "id": "01a08c58-647e-7122-81f5-5464d2dfce1c", "title": "Using JavaScript to Work with Spreadsheets, Part 5: Parsing XLSX Files", "url": "https://travishorn.com/using-javascript-to-work-with-spreadsheets-part-5-parsing-xlsx-files/", "published_at": "2021-01-18T23:01:12+00:00" }, { "id": "01a08c58-647e-7122-81f5-5464d3727b52", "title": "Using JavaScript to Work with Spreadsheets, Part 4: Making the CLI More Robust", "url": "https://travishorn.com/using-javascript-to-work-with-spreadsheets-part-4-making-the-cli-more-robust/", "published_at": "2021-01-11T23:03:30+00:00" }, { "id": "01a08c58-647e-7122-81f5-5464d3b75e57", "title": "Using JavaScript to Work with Spreadsheets, Part 3: Accepting Arguments & Reading Files", "url": "https://travishorn.com/using-javascript-to-work-with-spreadsheets-part-3-accepting-arguments-reading-files/", "published_at": "2021-01-04T23:03:06+00:00" }, { "id": "01a08c58-647e-7122-81f5-5464d3d04a3f", "title": "Using JavaScript to Work with Spreadsheets, Part 2: Setting up the Workspace", "url": "https://travishorn.com/using-javascript-to-work-with-spreadsheets-part-2-setting-up-the-workspace/", "published_at": "2020-12-28T23:03:06+00:00" }, { "id": "01a08c58-647e-7122-81f5-5464d4065cb0", "title": "Using JavaScript to Work with Spreadsheets, Part 1: The Shape of the Data", "url": "https://travishorn.com/using-javascript-to-work-with-spreadsheets-part-1-the-shape-of-the-data/", "published_at": "2020-12-21T22:16:33+00:00" }, { "id": "01a08c58-647e-7122-81f5-5464d4d54a6b", "title": "Building a Sparkline Dashboard", "url": "https://travishorn.com/building-a-sparkline-dashboard/", "published_at": "2020-08-31T11:01:01+00:00" }, { "id": "01a08c58-647e-7122-81f5-5464d55be223", "title": "Build a Sparkline Vue Component", "url": "https://travishorn.com/build-a-sparkline-vue-component/", "published_at": "2020-08-15T19:36:58+00:00" }, { "id": "01a08c58-647e-7122-81f5-5464d59bffff", "title": "Visualizing Google Sheets Data in D3", "url": "https://travishorn.com/visualizing-google-sheets-data-in-d3/", "published_at": "2020-05-29T22:01:01+00:00" }, { "id": "01a08c58-647e-7122-81f5-5464d5b1e2c3", "title": "Reacting to data changes in D3 using Vue", "url": "https://travishorn.com/reacting-to-data-changes-in-d3-using-vue/", "published_at": "2020-03-09T11:01:01+00:00" }, { "id": "01a08c58-647e-7122-81f5-5464d66ac83c", "title": "Introducing csval, an open source CSV data validator", "url": "https://travishorn.com/introducing-csval-an-open-source-csv-data-validator/", "published_at": "2019-10-10T22:01:01+00:00" }, { "id": "01a08c58-647e-7122-81f5-5464d6ce492a", "title": "Self-contained D3 Pie Chart Function", "url": "https://travishorn.com/self-contained-d3-pie-chart-function/", "published_at": "2019-10-07T22:01:03+00:00" }, { "id": "01a08c58-647e-7122-81f5-5464d7aff2ad", "title": "Self-contained D3 Bar Chart Function", "url": "https://travishorn.com/self-contained-d3-bar-chart-function/", "published_at": "2019-09-30T22:01:01+00:00" }, { "id": "01a08c58-647e-7122-81f5-5464d7c4178f", "title": "Combine Multiple PowerShell Commands into One", "url": "https://travishorn.com/combine-multiple-powershell-commands-into-one/", "published_at": "2019-08-22T23:01:09+00:00" }, { "id": "01a08c58-647e-7122-81f5-5464d88fd294", "title": "Build & Deploy Serverless Functions in 5 Minutes", "url": "https://travishorn.com/build-deploy-serverless-functions-in-5-minutes/", "published_at": "2019-08-13T22:01:01+00:00" }, { "id": "01a08c58-647e-7122-81f5-5464d8ed0ecd", "title": "Delaying forEach() Iterations", "url": "https://travishorn.com/delaying-foreach-iterations/", "published_at": "2019-07-04T11:01:01+00:00" }, { "id": "01a08c58-647e-7122-81f5-5464d9868a8a", "title": "Creating a Photo Gallery with Vue & CSS Grid", "url": "https://travishorn.com/creating-a-photo-gallery-with-vue-css-grid/", "published_at": "2019-06-20T12:01:01+00:00" }, { "id": "01a08c58-647e-7122-81f5-5464d9e3c2c0", "title": "Responsive grid in 2 minutes with CSS Grid Layout", "url": "https://travishorn.com/responsive-grid-in-2-minutes-with-css-grid-layout/", "published_at": "2019-06-06T12:01:01+00:00" }, { "id": "01a08c58-647e-7122-81f5-5464da13a7c3", "title": "Need part of a string? Just use slice()", "url": "https://travishorn.com/need-part-of-a-string-just-use-slice/", "published_at": "2019-05-23T12:01:02+00:00" }, { "id": "01a08c58-647e-7122-81f5-5464dab3d7c8", "title": "Removing parts of shapes in SVG", "url": "https://travishorn.com/removing-parts-of-shapes-in-svg/", "published_at": "2019-05-09T11:01:01+00:00" }, { "id": "01a08c58-647e-7122-81f5-5464dafaf381", "title": "Semantic versioning with Git tags", "url": "https://travishorn.com/semantic-versioning-with-git-tags/", "published_at": "2019-05-09T11:01:01+00:00" }, { "id": "01a08c58-647e-7122-81f5-5464db4ea9cf", "title": "API Server with JWT Authentication", "url": "https://travishorn.com/api-server-with-jwt-authentication/", "published_at": "2019-04-25T11:01:01+00:00" }, { "id": "01a08c58-647e-7122-81f5-5464dbb724c2", "title": "Getting Started with Vue Single File Components", "url": "https://travishorn.com/getting-started-with-vue-single-file-components/", "published_at": "2019-04-11T11:01:01+00:00" }, { "id": "01a08c58-647e-7122-81f5-5464dc9fe451", "title": "D3 Line Chart with Forecast", "url": "https://travishorn.com/d3-line-chart-with-forecast/", "published_at": "2019-03-28T11:01:01+00:00" }, { "id": "01a08c58-647e-7122-81f5-5464dd29f6f7", "title": "Creating a responsive header image", "url": "https://travishorn.com/creating-a-responsive-header-image/", "published_at": "2019-03-14T11:01:02+00:00" }, { "id": "01a08c58-647e-7122-81f5-5464dd62f0f2", "title": "Dealing with asynchronous functions in JavaScript", "url": "https://travishorn.com/dealing-with-asynchronous-functions-in-javascript/", "published_at": "2019-02-28T11:01:00+00:00" }, { "id": "01a08c58-647e-7122-81f5-5464ddef7c70", "title": "Just for fun: The LOL ID", "url": "https://travishorn.com/just-for-fun-the-lol-id/", "published_at": "2019-02-14T11:01:01+00:00" }, { "id": "01a08c58-647e-7122-81f5-5464dec2d9b5", "title": "The importance of standards and standards bodies in web development", "url": "https://travishorn.com/the-importance-of-standards-and-standards-bodies-in-web-development/", "published_at": "2019-01-31T11:01:01+00:00" }, { "id": "01a08c58-647e-7122-81f5-5464defe730b", "title": "Rapid prototyping with CSS keyword colors", "url": "https://travishorn.com/rapid-prototyping-with-css-keyword-colors/", "published_at": "2019-01-17T11:01:02+00:00" }, { "id": "01a08c58-647e-7122-81f5-5464dfe47fdd", "title": "Shorten functions with ES6 features", "url": "https://travishorn.com/shorten-functions-with-es6-features/", "published_at": "2019-01-03T22:01:02+00:00" }, { "id": "01a08c58-647e-7122-81f5-5464e08fe785", "title": "3 ways a front-end developer can reduce page load", "url": "https://travishorn.com/3-ways-a-front-end-developer-can-reduce-page-load/", "published_at": "2018-12-20T11:01:00+00:00" }, { "id": "01a08c58-647e-7122-81f5-5464e13f343a", "title": "Introducing the Diabetes Food Database", "url": "https://travishorn.com/introducing-the-diabetes-food-database/", "published_at": "2018-12-11T12:01:00+00:00" } ] posts Claim your blog
Back to travishorn.com
Blog · corpus.blog/blogs/travishorn.com/posts

travishorn.com

travishorn.com

2026

2025

2024

2023

2022

2021

2020

2019

2018