Skip to content

Instantly share code, notes, and snippets.

View narze's full-sized avatar
🕺
You know the rules, and so do I

Manassarn "Noom" Manoonchai narze

🕺
You know the rules, and so do I
View GitHub Profile
@narze
narze / SKILL.md
Last active July 21, 2026 04:58
Feel-lab Agent Skill (By Teepagorn Champ Wuttipitayamongkol) plus more 12 specimens
name feel-lab
description A catalogue of 41 perceived-performance and interface-craft techniques that make an app feel faster without changing how fast it actually is — skeletons, optimistic UI, spring physics, the Doherty threshold, and more. Invoke with /feel-lab.
disable-model-invocation true

Feel Lab

A reference catalogue of 41 techniques for perceived performance. The thesis: nothing here makes an app faster; everything here makes it feel faster. Each technique has a real off-state — the point is always the contrast between "trick on" and the bare interaction underneath.

@narze
narze / README.md
Created July 17, 2026 07:49
Bad Apple!! playing in a tldraw offline canvas (custom shape + Play/Pause/Reset + click-to-seek progress bar + optional synced audio)

Bad Apple!! in a tldraw offline canvas

Plays the Bad Apple!! silhouette animation inside the tldraw offline desktop app as a durable document script. A custom baplayer shape renders each frame as inline SVG (decode-free), driven at 30 fps, with Play / Pause, Reset, and a click-to-seek progress bar. An optional local audio file is used as the master clock so the animation stays in sync with the music.

Files

@narze
narze / llm-wiki-extended.md
Last active July 16, 2026 20:02 — forked from karpathy/llm-wiki.md
llm-wiki-extended

llm-wiki-extended Architecture

This vault follows the llm-wiki-extended pattern — an extension of Karpathy's llm-wiki with PARA organization, idea inbox, action orientation, and bidirectional cross-project knowledge flow.

The Original Insight (Karpathy's llm-wiki)

The core idea: Instead of using RAG (retrieve-at-query-time), maintain a persistent, LLM-curated wiki that sits between raw sources and the user. When you add a source, the LLM doesn't just index it — it integrates it:

  • Reads the source completely
@narze
narze / compose.yml
Created June 4, 2025 08:37
Minimum local Elastic Stack with APM
# Usage: Start docker compose, then point Elastic APM to http://localhost:8200
# Access Kibana at http://localhost:5601
services:
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:${ES_VERSION:-9.0.2}
ports:
- 9200:9200
- 9300:9300
environment:
@narze
narze / gist:4b33764266c4d99625d15309e073aa5b
Last active January 1, 2025 15:55
Arc Boost - Hide Facebook Notification Bubble
(function () {
'use strict';
const enabled = true;
function log() {
// Uncomment to debug
// console.log(arguments)
}
function findNotificationBubble() {
@narze
narze / blank.pdf
Created September 10, 2024 10:09
Blank PDF
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
@narze
narze / cuid2.rb
Last active February 27, 2024 21:12
Cuid2 implementation in Ruby, converted from cuid2.js via ChatGPT 4 with modified fingerprint creation
require "digest"
# Cuid2 in Ruby, converted from cuid2.js via ChatGPT 4
# https://github.com/paralleldrive/cuid2/blob/main/src/index.js
# Example usage
# cuid_instance = Cuid2.new
# puts cuid_instance.generate
# cuid_singleton = Cuid2.generate
# puts cuid_singleton
@narze
narze / whoshere.js
Created November 30, 2023 16:01
Fetch & count users in Slack general channel
(async () => {
async function getUsersInGeneralChannel(marker = null) {
const response = await fetch(
"https://edgeapi.slack.com/cache/TSK2FNWP3/users/list?fp=ed",
{
headers: {
accept: "*/*",
"accept-language": "en-US,en;q=0.9",
"content-type": "text/plain;charset=UTF-8",
"sec-ch-ua": '"Not)A;Brand";v="24", "Chromium";v="116"',
@narze
narze / thai-split.js
Created May 11, 2023 11:36
Split Thai graphemes but fix for vertical display
function splitthai(str) {
// https://github.com/nota/split-graphemes/blob/master/src/thai.js
const letter = '[\\u0E00-\\u0E7F]';
const trailingLetter = '[\\u0E31\\u0E33-\\u0E3A\\u0E47-\\u0E4E]';
const thai = `${letter}${trailingLetter}*`;
const splitter = new RegExp(`(${thai})`, 'gu');
return str.replace(/ำ/g, 'ํา').replace(/แ/g, 'เเ').match(splitter) || [];
}