Skip to content

Instantly share code, notes, and snippets.

@Nateliason
Nateliason / xpost
Created March 4, 2026 21:32
xpost CLI - X/Twitter API v2 posting tool
#!/usr/bin/env python3
"""xpost — X/Twitter API v2 CLI for Felix. OAuth 1.0a HMAC-SHA1."""
import sys, os, json, time, uuid, hashlib, hmac, base64, urllib.parse, urllib.request
KEYS_FILE = os.path.expanduser("~/.config/x-api/keys.env")
BASE = "https://api.x.com/2"
def load_keys():
keys = {}
@Nateliason
Nateliason / .env.example
Created January 31, 2026 18:48
Clawdbot Voice Chat — Pipecat + Deepgram + ElevenLabs (complete files)
# Deepgram — get a free key at https://console.deepgram.com (200hrs free)
DEEPGRAM_API_KEY=your_deepgram_api_key
# ElevenLabs — your existing key
ELEVENLABS_API_KEY=your_elevenlabs_api_key
# ElevenLabs voice ID (default: "Josh" — a clear male voice)
# Browse voices at https://elevenlabs.io/voice-library
ELEVENLABS_VOICE_ID=TxGEqnHWrfWFTfGW9XjX
@Nateliason
Nateliason / sentry-codex-workflow-guide.md
Created January 30, 2026 16:03
From Sentry Alert to Merged PR in Minutes: Automating Bug Fixes with Clawdbot + Codex

From Sentry Alert to Merged PR in Minutes: Automating Bug Fixes with Clawdbot + Codex

A practical guide to building an autonomous bug-fix pipeline using Sentry, Slack, Clawdbot, and OpenAI Codex CLI.


What This Is

Imagine this workflow:

@Nateliason
Nateliason / sort.js
Created January 14, 2019 20:36
Sort book notes
<script>
// Dynamic Filter
$(document).ready(function() {
// Code#001: Set Slug Variables
var slug = function(str) {
var $slug = '';
var trimmed = $.trim(str);
$slug = trimmed.replace(/[^a-z0-9-]/gi, '-').
replace(/-+/g, '-').