<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.9.3">Jekyll</generator><link href="https://webrender.net/feed.xml" rel="self" type="application/atom+xml" /><link href="https://webrender.net/" rel="alternate" type="text/html" /><updated>2023-09-21T18:48:36-07:00</updated><id>https://webrender.net/feed.xml</id><title type="html">jeremy laskar</title><subtitle>The online presence of Jeremy Laskar</subtitle><entry><title type="html">slack-wordle</title><link href="https://webrender.net/2022/01/08/slack-wordle.html" rel="alternate" type="text/html" title="slack-wordle" /><published>2022-01-08T17:00:00-08:00</published><updated>2022-01-08T17:00:00-08:00</updated><id>https://webrender.net/2022/01/08/slack-wordle</id><content type="html" xml:base="https://webrender.net/2022/01/08/slack-wordle.html">&lt;h4&gt;slack-wordle&lt;/h4&gt;
&lt;img src=&quot;https://github.com/webrender/slack-wordle/raw/main/screenshot.png&quot; align=&quot;left&quot; height=&quot;250&quot; style=&quot;margin-right: 10px;&quot;/&gt;
&lt;p&gt;Wordle for Slack! This slack bot downloads the official Wordle bundle from &lt;a href=&quot;https://www.powerlanguage.co.uk/wordle/&quot; target=&quot;_blank&quot;&gt;the official Wordle website&lt;/a&gt; and executes it in a VM, delivering the results directly to your slack client.&lt;/p&gt;

&lt;em&gt;Javascript, Node, Express, Slack bots&lt;/em&gt;&lt;br&gt;&lt;br&gt;

Source &amp; install instructions &lt;a href=&quot;https://github.com/webrender/slack-wordle&quot; target=&quot;_blank&quot;&gt;available on Github&lt;/a&gt;.&lt;/p&gt;</content><author><name></name></author><category term="projects" /><summary type="html">slack-wordle Wordle for Slack! This slack bot downloads the official Wordle bundle from the official Wordle website and executes it in a VM, delivering the results directly to your slack client. Javascript, Node, Express, Slack bots Source &amp; install instructions available on Github.</summary></entry><entry><title type="html">Building my Oahu Guide on Github Pages</title><link href="https://webrender.net/2022/01/08/oahuguide.html" rel="alternate" type="text/html" title="Building my Oahu Guide on Github Pages" /><published>2022-01-08T17:00:00-08:00</published><updated>2022-01-08T17:00:00-08:00</updated><id>https://webrender.net/2022/01/08/oahuguide</id><content type="html" xml:base="https://webrender.net/2022/01/08/oahuguide.html">&lt;h4&gt;Oahu Guide&lt;/h4&gt;
&lt;img src=&quot;https://hawaii.webrender.net/assets/img/preview.png&quot;/&gt;&lt;br/&gt;
&lt;p&gt;Shortly after moving to Oahu in 2018, I started putting together a guide to our favorite places for guests that would visit us.  Originally, this took the form of a straightforward GDoc that I'd print out for folks.  Over time, I added more formatting to the document, like a map with annotations.  However, google docs was clunky for this purpose - every time I wanted to add a location to the map, I'd have to edit the custom map, take a screenshot with the right dimensions, and paste it into a page in the document.  Most painfully, if I wanted the locations in the guide to be in a specific order, I'd have to adjust a bunch of the formatting to make everything flow nicely.&lt;/p&gt;
&lt;!--more--&gt;
&lt;p&gt;After a couple years, I started sharing the guide online with folks.  It covers a lot of places on Oahu which aren't covered by most guides and so it became quite popular, however it was still a painstaking process to edit it.  I decided that I would redo the guide, except this time as a website so that it would be easier to make changes.  The new guide needed to satisfy a few requirements:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;Easy to view, on both desktop and mobile&lt;/li&gt;
    &lt;li&gt;Nicely formatted when printed&lt;/li&gt;
    &lt;li&gt;Easy to update&lt;/li&gt; 
&lt;/ul&gt;

&lt;p&gt;I ended up choosing Github Pages to host the guide.  I'd done some Jekyll work with pages before (like this site) and felt like I didn't really need a whole frontend infrastructure - or any backend. Since I was already using google maps in the document version of the guide, I decided to try and continue using google maps. Initially, I played around with the Static Maps API - attempting to make an exact clone of the google doc - but the functionality was far too limited.  Plus, I definitely had the desire for more interactivity than a static map. So, I switched to the Maps Javascript API.&lt;/p&gt;

&lt;p&gt;If you check out the source code for the site, you'll see that there's really two main pieces to rendering the map: The YAML, which contains all the information to render the map, as well as the markdown text needed to generate the sidebar; and the map layout template, which contains all the javascript necessary to render the map.&lt;/p&gt;

&lt;p&gt;The YAML breaks down the page in a pretty straightforward manner:&lt;/p&gt;
- Map: each map generates a section in the sidebar, and a container that the JS can use to detect when that map should be loaded.
- Polygon: The guide is broken down into sections, which you can see in the overview map at the top of the page.  The polygon parameters define which area each sub-map represents.
- Markers: the individual items on each map, consisting of: a title, a description, the lon/lat coordinates on the map, and an optional image. 

&lt;p&gt;In the map layout, the first thing we do is take the YAML and turn it into a JSON array. Then, we can load the maps API and render the data as necessary.  In addition, there's a little extra JS in the layout to handle things like click events and loading the different maps when the user scrolls down. That's pretty much it, just a sprinkle of javascript to get everything up and running.&lt;/p&gt;

&lt;p&gt;A couple months after launching the map, disaster struck: the site was a victim of it's own success.  I had run up against google maps' free tier API limits. I set out to find an open source alternative, and settled on the following:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;a href=&quot;https://www.maptiler.com/server/&quot; target=&quot;_blank&quot;&gt;Mapping server from Maptiler&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;https://data.maptiler.com/downloads/planet/&quot; target=&quot;_blank&quot;&gt;Vector map data from Maptiler&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;https://openmaptiles.org/styles/&quot; target=&quot;_blank&quot;&gt;Map styles from OpenMapStyles&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;https://maplibre.org/&quot; target=&quot;_blank&quot;&gt;MapLibre for the frontend&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I'm super happy with this solution - the maps are sharp and crisp, and MapLibre's API is very close to google maps - I was able to move the maps over to the new libraries within a couple hours.&lt;/p&gt;
&lt;p&gt;Hope this guide will help anyone on their mapping journey! Please hit me up with any questions.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/webrender/oahuguide&quot;&gt;Source available on Github.&lt;/a&gt;&lt;/p&gt;</content><author><name></name></author><category term="projects" /><summary type="html">Oahu Guide Shortly after moving to Oahu in 2018, I started putting together a guide to our favorite places for guests that would visit us. Originally, this took the form of a straightforward GDoc that I'd print out for folks. Over time, I added more formatting to the document, like a map with annotations. However, google docs was clunky for this purpose - every time I wanted to add a location to the map, I'd have to edit the custom map, take a screenshot with the right dimensions, and paste it into a page in the document. Most painfully, if I wanted the locations in the guide to be in a specific order, I'd have to adjust a bunch of the formatting to make everything flow nicely.</summary></entry><entry><title type="html">synthwave-x-fluoromachine</title><link href="https://webrender.net/2019/05/01/synthwave-x-fluoromachine.html" rel="alternate" type="text/html" title="synthwave-x-fluoromachine" /><published>2019-05-01T18:00:00-07:00</published><updated>2019-05-01T18:00:00-07:00</updated><id>https://webrender.net/2019/05/01/synthwave-x-fluoromachine</id><content type="html" xml:base="https://webrender.net/2019/05/01/synthwave-x-fluoromachine.html">&lt;h4&gt;synthwave-x-fluoromachine&lt;/h4&gt;
&lt;img src=&quot;https://repository-images.githubusercontent.com/184457193/69dcff00-14d2-11ea-90e1-4bdf6fef80ca&quot;/&gt;
&lt;p&gt;synthwave-x-fluoromachine is a fork of &lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=RobbOwen.synthwave-vscode&quot; target=&quot;_blank&quot;&gt;@robbowen's Synthwave '84 theme&lt;/a&gt;, merged with &lt;a href=&quot;https://colorsublime.github.io/themes/FluoroMachine/&quot; target=&quot;_blank&quot;&gt;@fullerenedream's Fluoromachine theme&lt;/a&gt; for VSCode.&lt;/p&gt;

&lt;em&gt;CSS, VSCode extensions&lt;/em&gt;&lt;br&gt;&lt;br&gt;

Source &amp; install instructions &lt;a href=&quot;https://github.com/webrender/synthwave-x-fluoromachine&quot; target=&quot;_blank&quot;&gt;available on Github&lt;/a&gt;.&lt;/p&gt;</content><author><name></name></author><category term="projects" /><summary type="html">synthwave-x-fluoromachine synthwave-x-fluoromachine is a fork of @robbowen's Synthwave '84 theme, merged with @fullerenedream's Fluoromachine theme for VSCode. CSS, VSCode extensions Source &amp; install instructions available on Github.</summary></entry><entry><title type="html">Fictiv</title><link href="https://webrender.net/2018/05/29/fictiv.html" rel="alternate" type="text/html" title="Fictiv" /><published>2018-05-29T18:00:00-07:00</published><updated>2018-05-29T18:00:00-07:00</updated><id>https://webrender.net/2018/05/29/fictiv</id><content type="html" xml:base="https://webrender.net/2018/05/29/fictiv.html">&lt;h4&gt;fictiv&lt;/h4&gt;
&lt;img src=&quot;/post_files/fictiv_pegboard.jpg&quot;/&gt;
&lt;p&gt;I've been working with Fictiv since 2018, first as a lead frontend developer; and since 2021, as an engineering manager. In my time there, I've led the launch of the multiple new products, as well as countless features for the user-facing, admin-facing, and computational geometry teams.&lt;/p&gt;

&lt;p&gt;In addition to my coding responsibilities, I've worked to mentor my fellow developers in best practices for modern frontend development and user experience. As an engineering manager, I have spun up several new development teams at the company, as well as taken existing teams and optimized their processes around productivity and developer wellbeing.&lt;/p&gt;

&lt;p&gt;I've been working with Fictiv in a fully-remote capacity since the beginning of 2019.&lt;/p&gt;
&lt;img src=&quot;/post_files/fictiv.png&quot;/&gt;
&lt;em&gt;React/Redux, GraphQL, Python, Ruby, AWS&lt;/em&gt;&lt;br&gt;&lt;br&gt;

&lt;a href=&quot;http://www.fictiv.com&quot; target=&quot;_blank&quot;&gt;Visit fictiv.com »&lt;/a&gt;&lt;/p&gt;</content><author><name></name></author><category term="fictiv" /><category term="portfolio" /><summary type="html">fictiv I've been working with Fictiv since 2018, first as a lead frontend developer; and since 2021, as an engineering manager. In my time there, I've led the launch of the multiple new products, as well as countless features for the user-facing, admin-facing, and computational geometry teams. In addition to my coding responsibilities, I've worked to mentor my fellow developers in best practices for modern frontend development and user experience. As an engineering manager, I have spun up several new development teams at the company, as well as taken existing teams and optimized their processes around productivity and developer wellbeing. I've been working with Fictiv in a fully-remote capacity since the beginning of 2019. React/Redux, GraphQL, Python, Ruby, AWS Visit fictiv.com »</summary></entry><entry><title type="html">standup-helper</title><link href="https://webrender.net/2018/03/26/standup-helper.html" rel="alternate" type="text/html" title="standup-helper" /><published>2018-03-26T01:00:00-07:00</published><updated>2018-03-26T01:00:00-07:00</updated><id>https://webrender.net/2018/03/26/standup-helper</id><content type="html" xml:base="https://webrender.net/2018/03/26/standup-helper.html">&lt;h4&gt;standup-helper&lt;/h4&gt;
&lt;img src=&quot;/post_files/standup-helper-demo.gif&quot;/&gt;&lt;br/&gt;
&lt;p&gt;At Disqus, teams meet for a daily standup to check-in and share the latest updates on projects and ask questions. Since we have a distributed team working across different time zones, having standup at a fixed time isn’t ideal. We experimented with a few standup bots for Slack but found that they didn’t provide enough context around what people were working on. Specifically, we wanted a better way to connect a developer’s update to the related Trello card(s).&lt;/p&gt;
&lt;!--more--&gt;
&lt;p&gt;To solve this problem, we created Standup Helper, an open source Slackbot. It integrates with Trello by linking people’s responses to the cards they’re assigned to.&lt;/p&gt;
&lt;p&gt;Using this information, Standup Helper creates an interactive, asynchronous dashboard that our team can use to augment our standups with useful, persistent data such as:&lt;/p&gt;
&lt;li&gt;Active/inactive tasks, linked to their corresponding Trello cards&lt;/li&gt;
&lt;li&gt;Recently merged PRs and PRs in review (integrates with Phabricator)&lt;/li&gt;
&lt;li&gt;Upcoming Out of Offices (integrates with an OOO ICS feed)&lt;/li&gt;
&lt;li&gt;Custom notes, interrupt notifications, and sidebar requests&lt;/li&gt;
&lt;li&gt;Standup Helper lets us get process out of the way so we can focus our standups around meaningful conversations.&lt;/li&gt;
&lt;p&gt;Source + install instructions &lt;a href=&quot;https://github.com/disqus/phab-trello&quot;&gt;available on Github.&lt;/a&gt;&lt;/p&gt;</content><author><name></name></author><summary type="html">standup-helper At Disqus, teams meet for a daily standup to check-in and share the latest updates on projects and ask questions. Since we have a distributed team working across different time zones, having standup at a fixed time isn’t ideal. We experimented with a few standup bots for Slack but found that they didn’t provide enough context around what people were working on. Specifically, we wanted a better way to connect a developer’s update to the related Trello card(s).</summary></entry><entry><title type="html">phab-trello</title><link href="https://webrender.net/2018/03/26/phab-trello.html" rel="alternate" type="text/html" title="phab-trello" /><published>2018-03-26T00:00:00-07:00</published><updated>2018-03-26T00:00:00-07:00</updated><id>https://webrender.net/2018/03/26/phab-trello</id><content type="html" xml:base="https://webrender.net/2018/03/26/phab-trello.html">&lt;h4&gt;phab-trello&lt;/h4&gt;
&lt;img src=&quot;/post_files/phab-trello-demo.gif&quot;/&gt;&lt;br/&gt;
&lt;p&gt;Disqus uses Phabricator for our version control, and we use Trello for our scrum &amp; task management. There was no integration between these tools, so we created one.&lt;/p&gt;
&lt;!--more--&gt;
&lt;p&gt;We decided to use webhooks rather than the Phabricator API, so that we could preserve separation of concerns and keep our Phabricator server from being directly exposed.&lt;/p&gt;
&lt;p&gt;Source + install instructions &lt;a href=&quot;https://github.com/disqus/phab-trello&quot;&gt;available on Github.&lt;/a&gt;</content><author><name></name></author><summary type="html">phab-trello Disqus uses Phabricator for our version control, and we use Trello for our scrum &amp; task management. There was no integration between these tools, so we created one.</summary></entry><entry><title type="html">hangoutlook</title><link href="https://webrender.net/2018/03/25/hangoutlook.html" rel="alternate" type="text/html" title="hangoutlook" /><published>2018-03-25T23:00:00-07:00</published><updated>2018-03-25T23:00:00-07:00</updated><id>https://webrender.net/2018/03/25/hangoutlook</id><content type="html" xml:base="https://webrender.net/2018/03/25/hangoutlook.html">&lt;h4&gt;hangoutlook&lt;/h4&gt;
&lt;img src=&quot;https://camo.githubusercontent.com/914f60c865322b2d3b926fd22a7daebbc108690b/68747470733a2f2f692e696d6775722e636f6d2f5931545a336c4b2e676966&quot;/&gt;&lt;br/&gt;
&lt;p&gt;Once upon a time, there was a company. And the company ran Gsuite and used Google Hangouts and all was well. Hangout boxes setup in the conference rooms displayed upcoming schedules &amp; let you connect to calls.&lt;/p&gt;
&lt;p&gt;But then the company was acquired and had to switch to Outlook, and there was felt a great disturbance in the force, as if millions of meetings suddenly cried out in terror and were suddenly silenced. Outlook meeting room calendars could not connect to the Hangout boxes, and conference rooms were in chaos.&lt;/p&gt;
&lt;!--more--&gt;
&lt;p&gt;Hangoutlook was created as a solution to this chaos. It parses an ICS calendar URL and displays a meeting room screen which looks and acts exactly like Hangouts, with some added bonuses:&lt;/p&gt;
&lt;li&gt;Parses Google Hangout URLs, as well as custom URL patterns for other call URLs&lt;/li&gt;
&lt;li&gt;Generates a meeting name if there's none specified&lt;/li&gt;
&lt;li&gt;Works with anything that can generate an ICS file&lt;/li&gt;
&lt;li&gt;Alt-click meetings to join them in present mode&lt;/li&gt;
&lt;li&gt;Awesome backgrounds from Unsplash&lt;/li&gt;
&lt;li&gt;Chrome OS compatible - Use &lt;a href=&quot;https://github.com/webrender/hangoutlook-redirector&quot;&gt;hangoutlook-redirector&lt;/a&gt; to monitor &amp; redirect hangouts -&gt; hangoutlook&lt;/li&gt;
&lt;p&gt;Source + install instructions &lt;a href=&quot;https://github.com/webrender/hangoutlook&quot;&gt;available on Github.&lt;/a&gt;</content><author><name></name></author><summary type="html">hangoutlook Once upon a time, there was a company. And the company ran Gsuite and used Google Hangouts and all was well. Hangout boxes setup in the conference rooms displayed upcoming schedules &amp; let you connect to calls. But then the company was acquired and had to switch to Outlook, and there was felt a great disturbance in the force, as if millions of meetings suddenly cried out in terror and were suddenly silenced. Outlook meeting room calendars could not connect to the Hangout boxes, and conference rooms were in chaos.</summary></entry><entry><title type="html">ifttt-ghpages: Automate your Github Pages blog</title><link href="https://webrender.net/2017/11/23/automate-github-pages-ifttt-glitch.html" rel="alternate" type="text/html" title="ifttt-ghpages: Automate your Github Pages blog" /><published>2017-11-23T14:30:00-08:00</published><updated>2017-11-23T14:30:00-08:00</updated><id>https://webrender.net/2017/11/23/automate-github-pages-ifttt-glitch</id><content type="html" xml:base="https://webrender.net/2017/11/23/automate-github-pages-ifttt-glitch.html">&lt;h2 id=&quot;how-to-automate-your-github-pages-blog---for-free---with-ifttt-and-glitch&quot;&gt;How to automate your Github Pages blog - for free - with IFTTT and Glitch&lt;/h2&gt;

&lt;p&gt;&lt;img src=&quot;/post_files/ifttt-ghpages.png&quot; alt=&quot;&quot; title=&quot;ifttt-ghpages&quot; /&gt;&lt;/p&gt;

&lt;p&gt;_Update 06/29: This article has been translated into Uzbek by GetColorings - check it out here: &lt;a href=&quot;http://getcolorings.com/uz-automate-github&quot;&gt;http://getcolorings.com/uz-automate-github&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Earlier this month, I finally decided that it was time to migrate my personal blog from Tumblr to Github Pages.  The one thing holding me back was social media cross-posting;  On Tumblr, I had been using IFTTT to create new posts based on my social media sharing, but IFTTT doesn’t natively support Github Pages.&lt;/p&gt;

&lt;p&gt;To solve this problem, I created &lt;a href=&quot;https://glitch.com/~ifttt-ghpages&quot;&gt;ifttt-ghpages&lt;/a&gt;, a small webhook you can run for free on &lt;a href=&quot;https://glitch.com&quot;&gt;Glitch&lt;/a&gt; that creates posts on Github Pages from IFTTT actions.&lt;/p&gt;

&lt;p&gt;This blog uses ifttt-ghpages to integrate my activity from Github, Twitter, Instagram and Spotify. The great thing about IFTTT is its flexibility - IFTTT supports hundreds of services and you can use any of them to automate your blog posts!  For this example, we’re going to setup a trigger that automatically cross-posts new images from Instagram on our blog.
&lt;!--more--&gt;&lt;/p&gt;

&lt;p&gt;Some things to note before we continue:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;This guide assumes that you have already setup a Github Pages site, which is using the Jekyll site generator.  If you’re unfamiliar with Github Pages, you should &lt;a href=&quot;https://help.github.com/articles/using-jekyll-as-a-static-site-generator-with-github-pages/&quot;&gt;create one first&lt;/a&gt; before moving on.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;ifttt-ghpages takes advantage of Github Pages’ automated Jekyll build system - if you are pregenerating your site pages, or using a static site generator other than Jekyll, ifttt-ghpages does not currently support these use cases (although &lt;a href=&quot;http://github.com/webrender/ifttt-ghpages&quot;&gt;pull requests&lt;/a&gt; for new functionality are welcome!)&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Let’s start by creating a fork of ifttt-ghpages on Glitch.  Glitch calls forks “remixes”.  Go to the &lt;a href=&quot;https://glitch.com/~ifttt-ghpages&quot;&gt;ifttt-ghpages preview&lt;/a&gt;, and click &lt;strong&gt;Remix your own&lt;/strong&gt; to create your own copy of the project.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/post_files/ifttt-ghpages-1.png&quot; alt=&quot;&quot; title=&quot;Glitch project preview&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Now that you’ve got your own copy of ifttt-ghpages, we’ll need to specify the environment variables needed to run the app.  In glitch, the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.env&lt;/code&gt; file contains your environment variables - and this file is special because only users you’ve invited to collaborate on your project can see the values within. This lets you store sensitive data in Glitch, such as API keys, without risk of exposing them to other users.&lt;/p&gt;

&lt;p&gt;Open the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.env&lt;/code&gt; file and you’ll see 4 variables to set:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;GH_USER&lt;/code&gt;: your Github username.&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;GH_REPO&lt;/code&gt;: the repo that contains your Github Pages&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;GH_TOKEN&lt;/code&gt;: Your GitHub user token, which we will use to push new commits to your repo via the Github API. You can generate a user token &lt;a href=&quot;https://github.com/settings/tokens&quot;&gt;here&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;WEBHOOK_TOKEN&lt;/code&gt;: A random token of your choice which we will specify in our requests from IFTTT in order to verify the request is not coming from someone else. This token can be anything but I reccomend generating a UUID using a site such as &lt;a href=&quot;https://www.uuidtools.com&quot;&gt;https://www.uuidtools.com&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That’s all the setup necessary in Glitch. Hold onto the project name Glitch gave you, as well as the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;WEBHOOK_TOKEN&lt;/code&gt; you set - we’re going to need them when we setup IFTTT. If you’d like, you can change the project name to something easier to remember.&lt;/p&gt;

&lt;p&gt;OK, now that we have Glitch setup properly, let’s create a new trigger in IFTTT - IFTTT calls these Applets.  Login to IFTTT and create a &lt;strong&gt;New Applet&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/post_files/ifttt-ghpages-2.png&quot; alt=&quot;&quot; title=&quot;IFTTT New Applet&quot; /&gt;&lt;/p&gt;

&lt;p&gt;On the new applet page, select the &lt;strong&gt;this&lt;/strong&gt; link and choose &lt;strong&gt;Instagram&lt;/strong&gt; for your service, then the trigger &lt;strong&gt;Any new photo by you&lt;/strong&gt;.  for the &lt;strong&gt;that&lt;/strong&gt; action, choose the &lt;em&gt;Webhooks&lt;/em&gt; service, then the trigger &lt;strong&gt;Make a web request&lt;/strong&gt;. Setup your webhook as follows:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;URL&lt;/strong&gt;: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;https://YOUR-PROJECT-NAME.glitch.me/?token=YOUR-TOKEN&lt;/code&gt; - use the project name and &lt;strong&gt;WEBHOOK_TOKEN&lt;/strong&gt; variables from the Glitch project we created earlier.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Method&lt;/strong&gt;: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;POST&lt;/code&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Content Type&lt;/strong&gt;: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;text/plain&lt;/code&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Body&lt;/strong&gt;: A YAML-formattted Jekyll document, with newlines replaced with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;|||&lt;/code&gt;. There are several examples specified in this project’s &lt;a href=&quot;https://github.com/webrender/ifttt-ghpages/examples&quot;&gt;Github repo&lt;/a&gt;, but here’s the example for Instagram: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;---|||layout: post|||title: {{Caption}} - Tweet|||network: instagram|||date: {{CreatedAt}}|||---|||{{EmbedCode}}&lt;/code&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Technical note:  Initially I had built ifttt-ghpages to accept JSON, but had trouble escaping JSON &amp;amp; newlines properly with IFTTT so I’ve instead used the format above.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;And you’re all set! Now when you create a post on instagram, you’ll notice a new commit to your Github Pages repo shortly afterwards:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/post_files/ifttt-ghpages-3.png&quot; alt=&quot;&quot; title=&quot;New commit on Github&quot; /&gt;&lt;/p&gt;

&lt;p&gt;As I mentioned earlier, the possibilities are only limited by the number of services &amp;amp; triggers IFTTT supports. Some ideas based on other IFTTT triggers:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;SMS&lt;/strong&gt;: Post to your blog from your mobile phone&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Google Assistant&lt;/strong&gt;: Post to your blog with your voice&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Pocket&lt;/strong&gt;: Post to your blog when you save an article&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Phillips Hue&lt;/strong&gt;: Sync your website background with your current lighting&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Nest Cam&lt;/strong&gt;: Post an image to your blog when your camera sees motion&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Trello&lt;/strong&gt;: use a trello board as a backend for your blog posts&lt;/li&gt;
&lt;/ul&gt;</content><author><name></name></author><category term="IFTTT" /><category term="Github" /><category term="Glitch" /><summary type="html">How to automate your Github Pages blog - for free - with IFTTT and Glitch _Update 06/29: This article has been translated into Uzbek by GetColorings - check it out here: http://getcolorings.com/uz-automate-github Earlier this month, I finally decided that it was time to migrate my personal blog from Tumblr to Github Pages. The one thing holding me back was social media cross-posting; On Tumblr, I had been using IFTTT to create new posts based on my social media sharing, but IFTTT doesn’t natively support Github Pages. To solve this problem, I created ifttt-ghpages, a small webhook you can run for free on Glitch that creates posts on Github Pages from IFTTT actions. This blog uses ifttt-ghpages to integrate my activity from Github, Twitter, Instagram and Spotify. The great thing about IFTTT is its flexibility - IFTTT supports hundreds of services and you can use any of them to automate your blog posts! For this example, we’re going to setup a trigger that automatically cross-posts new images from Instagram on our blog.</summary></entry><entry><title type="html">ifttt-ghpages</title><link href="https://webrender.net/2017/11/15/ifttt-ghpages.html" rel="alternate" type="text/html" title="ifttt-ghpages" /><published>2017-11-15T23:00:00-08:00</published><updated>2017-11-15T23:00:00-08:00</updated><id>https://webrender.net/2017/11/15/ifttt-ghpages</id><content type="html" xml:base="https://webrender.net/2017/11/15/ifttt-ghpages.html">&lt;h4&gt;ifttt-ghpages&lt;/h4&gt;
&lt;img src=&quot;/post_files/ifttt-ghpages.png&quot;/&gt;&lt;br/&gt;
&lt;p&gt;This is a node app (which you can run on &lt;a href=&quot;https://glitch.com/~ifttt-ghpages&quot;&gt;Glitch&lt;/a&gt; for free) that lets you create new posts in a Jekyll-based Github Pages site, based on IFTTT actions.  This lets you automatically aggregate a variety of networks and communication mediums into your static blog without client-side javascript. It's used to generate many of the blog posts on this site!&lt;/p&gt;
&lt;p&gt;Source &lt;a href=&quot;https://github.com/webrender/ifttt-ghpages&quot;&gt;available on Github.&lt;/a&gt;</content><author><name></name></author><summary type="html">ifttt-ghpages This is a node app (which you can run on Glitch for free) that lets you create new posts in a Jekyll-based Github Pages site, based on IFTTT actions. This lets you automatically aggregate a variety of networks and communication mediums into your static blog without client-side javascript. It's used to generate many of the blog posts on this site! Source available on Github.</summary></entry><entry><title type="html">Trello Collapsible Lists</title><link href="https://webrender.net/2017/07/17/collapsible-trello-lists.html" rel="alternate" type="text/html" title="Trello Collapsible Lists" /><published>2017-07-17T00:00:00-07:00</published><updated>2017-07-17T00:00:00-07:00</updated><id>https://webrender.net/2017/07/17/collapsible-trello-lists</id><content type="html" xml:base="https://webrender.net/2017/07/17/collapsible-trello-lists.html">&lt;h4&gt;Trello Collapsible Lists&lt;/h4&gt;
&lt;img src=&quot;/post_files/trello-lists.jpg&quot;/&gt;&lt;br/&gt;
&lt;p&gt;This is a browser extension I put together that lets you collapse Trello lists to make boards easier to read. You can install it from the &lt;a href=&quot;https://chrome.google.com/webstore/detail/collapsible-trello-lists/kejemfjfgoaekplmemlkjljcfloiemho?authuser=1&quot;&gt;Chrome Web Store&lt;/a&gt; or from &lt;a href=&quot;https://addons.mozilla.org/en-US/firefox/addon/collapsible-trello-lists/&quot;&gt;addons.mozilla.org&lt;/a&gt; for Firefox.&lt;/p&gt;
&lt;p&gt;Source &lt;a href=&quot;https://github.com/webrender/trello-collapse-lists&quot;&gt;available on Github.&lt;/a&gt;&lt;BR&gt;&lt;BR&gt;
&lt;img src=&quot;/post_files/trello-columns.gif&quot;/&gt;&lt;br/&gt;</content><author><name></name></author><summary type="html">Trello Collapsible Lists This is a browser extension I put together that lets you collapse Trello lists to make boards easier to read. You can install it from the Chrome Web Store or from addons.mozilla.org for Firefox. Source available on Github.</summary></entry></feed>