Skip to content

Instantly share code, notes, and snippets.

@narthur
narthur / extract-pr.md
Last active January 1, 2026 16:51
Warp Saved Prompts

PR Extractor - Warp AI Saved Prompt

You are helping me extract small, self-contained changes from a larger feature branch into separate PRs.

Prerequisites

This workflow uses helper scripts. Ensure these are installed and in your PATH:

  • pr-extract-context - Gathers branch context (base branch, rebase status, diff stats)
  • pr-extract-rebase - Safely rebases current branch
@narthur
narthur / taskratchet-integration-plugin.js
Last active September 12, 2024 16:03
TaskRatchet integration plugin pseudocode
import extractTags from '~lib/extractTags'
import createDatapoint from '~services/beeminder/createDatapoint'
import { BEEMINDER_CLIENT_ID } from '~lib/constants'
import definePlugin from '~lib/definePlugin'
import sanitize from '~lib/sanitize'
/*
Events:
- taskCreate
{
"editor.codeActionsOnSave": {
"source.fixAll": "explicit"
},
"editor.formatOnSave": true,
"editor.inlineSuggest.enabled": true,
"editor.inlineSuggest.showToolbar": "always",
"editor.linkedEditing": true,
"eslint.format.enable": true,
"eslint.probe": [

Please create a concise and professional cover letter for the following Upwork job using my experience. Please ensure it meets the following requirements:

  • Hook the client in the first two sentences since this is what will be visible to the client before they click in.
  • Clearly communicate that I understand the job by restating the job’s requirements in different words.
  • Provide supporting evidence from my work history as to why I would be the ideal contractor for the job.
  • Clearly communicate how I can add value to the client's business.
  • End the proposal with a CTA to schedule a quick 10 minute introduction call.
  • Include three questions I'll have for them during the call so they can think ahead.

Nathan Arthur

Full-stack web developer proficient in NodeJS, PHP, and Python stacks. I enjoy working with stakeholders to find the optimal solution, and then building that solution from the ground up.

Experience

TaskRatchet

Founder
March 2019 - Present (5 years 1 month)

@narthur
narthur / settings.json
Last active December 20, 2023 20:34
Etherpad settings
/**
* THIS IS THE SETTINGS FILE THAT IS COPIED INSIDE THE DOCKER CONTAINER.
*
* By default, some runtime customizations are supported (see the
* documentation).
*
* If you need more control, edit this file and rebuild the container.
*/
/*
{% set announcements = su.collection( "announcements" )
.activationDate( "now"|date( 'Y-m-d' ), "<=" )
.deactivationDate( "now"|date( 'Y-m-d' ), ">" ).or().deactivationDate( "", "=" )
.find() %}
<ul class='custom-announcements'>
{% for announcement in announcements %}
<li>
<h5>{{ announcement.title }}</h5>
{{ announcement.details|markdown }}
@narthur
narthur / journal.py
Last active April 30, 2019 20:31
Script for generating Beeminder journal updates
#!/usr/bin/env python3
import os
import yaml
from beeminderpy import Beeminder
import json
from pprint import pprint
from tabulate import tabulate
import datetime
import time
@narthur
narthur / Twig.php
Last active January 20, 2019 15:56
[Twig wrapper object] #php
<?php
namespace Resume;
class Twig {
private $twig;
public function __construct() {
$loader = new \Twig_Loader_Filesystem([
BASEDIR . "/twig"
@narthur
narthur / Filesystem.php
Last active January 31, 2019 16:30
[Filesystem object] #php
<?php
namespace Resume;
class Filesystem
{
private $recursiveMatchingScans = [];
public function getFile($path)
{