Library
01 · Capture — iOS Shortcut / browser

Shortcut "Humane" (Share Sheet)

Accepts URLs + Text from any app. Normalizes the link — regex replace \?.*"" strips ?igsh=… tracking so dedup keys on the canonical URL.

Then a raw REST call, no SDK: POST /rest/v1/inbox_links?on_conflict=url — headers apikey: <anon> · Authorization: Bearer <anon> · Content-Type: application/json · Prefer: resolution=ignore-duplicates — body {"url": <cleaned link>}. Re-sharing the same reel is a silent no-op.

/add page (fallback + monitor)

Static HTML in a Squarespace code block, anon key baked in. Same insert via fetch(), plus GET …?status=eq.pending&order=created_at.desc to render the live queue — doubles as a health check without touching the PC.

The anon key is public by design — RLS below is what makes that safe
02 · Queue — Supabase (Postgres + PostgREST)

The queue is the only state in the system

create table inbox_links (
  id  bigint generated always as identity primary key,
  url  text unique not null, -- dedup constraint the upsert targets
  status  text default 'pending', -- pending → done; failures stay pending
  created_at  timestamptz default now() );

Row-level security on. Two policies for anon: INSERT and SELECT only — the public key physically cannot update or delete. The service_role key (PC only, in config.json) is what flips status.

Polled, not pushed — Task Scheduler: at logon + daily 02:00 with WakeToRun. No webhook, no listener, nothing exposed
03 · Worker — Windows PC, Python venv

run_auto.bat → pythonw library_tool.py --auto

pythonw = zero console flash. Per run: GET status=eq.pending with the service key, then for each row —

yt-dlp download, cookie chain --cookies-from-browser firefox → edge → chrome (Chromium cookies are DPAPI-locked on Windows; Firefox's SQLite jar is readable, so Firefox must be logged in & closed).

2  Credit extraction from metadata — prefers a human uploader handle over Instagram's numeric uploader_id; a Fix Credits pass can rewrite old entries from metadata alone, no re-download.

PATCH …?id=eq.{id}status=done. Any failure: row untouched, retried next run. Every step timestamped into log.txt.

Storage — boto3 → Cloudflare R2 (S3 API)

put_object to the inspo bucket via the S3-compatible endpoint. Key = the reel's shortcode (DaDpHOeuemh.mp4) — re-processing overwrites instead of duplicating, so the whole pipeline is idempotent.

list.json is read-modified-written alongside: an append-only array of {"video", "handle", "post"} — the entire "database" the public site ever sees. Zero egress fees; the R2 public domain is the CDN.

Front end never talks to Supabase or the PC — it only reads two static things: list.json and the MP4s
04 · Delivery — the wall, no framework

arboledaf.com/visualinfluence

Vanilla JS in one code block. fetch(list.json) → Fisher-Yates shuffle → one <video> tile per item in a CSS scroll-snap feed. An IntersectionObserver plays only the visible tile and lazy-assigns src from data-src, so 160+ videos don't preload.

Autoplay policy handled per platform: muted autoplay playsinline attributes for iPadOS, sound upgrade attempted after, first-gesture unlock, silent retry on canplay — never more than one play prompt, ever. ended → auto-advance. Credit links back to the original post.

Ai is a powerful tool, and I knew I needed to learn how to use it beyond my normal design needs. So I decided to try building software (a little enter the Matrix moment). I spend more time on Instagram than I’d like to admit, so I decided to turn some of that time into something I actually value. The idea was simple: whenever I find a video on Instagram that inspires me, I use a custom iOS shortcut on my phone to send it directly into my own curated visual library. How everything behind it works is still a bit of a mystery to me, but somehow I got it working.

The Instagram URL is captured and added to a queue. From there, a small app I built downloads the video, pulls the creator information from the post, uploads the video to Cloudflare, and keeps track of the process through Supabase. The original creator is always credited!
What came out of it is my own visual inspiration library. A collection intentionally shaped by what I find interesting: nature, spaces, objects, transportation, art, and incredible things humans create. Being online is part of being a creative, and algorithms are inevitably part of that. But I don't want an algorithm to influence my taste. I would rather influence it, curate it, and build my own relationship with what inspires me. Because at the other end of that algorithm are incredible people, ideas, stories, and creations. Those are the things I want to discover and be inspired by. The algorithm should help me find them, not decide for me what I should care about.

I don't think the answer is to be anti-technology, anti-AI, or anti-social media. These tools are here, and they can be incredibly useful. I think the important part is being intentional about how we use them. Taking control of the tools instead of letting the tools take control of us. In a small way, this project is an attempt to do exactly that: use social media on my own terms and turn something that can easily become mindless consumption into a source of intentional inspiration.