← Commit history
sxsw-vote v1.0.0: skill, readme, install scripts
5 files changed
+272−1
README.md+52−1@@ -1,3 +1,54 @@ # SXSW Panel Vote Assistant -Your AI casts your SXSW PanelPicker vote for the Adom panel. Newbie-friendly: installs ab + pup with you. Deadline Aug 23.+Adom is going for the SXSW 2027 stage. John is a speaker on **"The+Million-Dollar Markets Hiding in Plain Sight"**, a panel moderated by Jason+Roys (CEO of MotionSafe, an Adom customer), alongside the CEOs of LEAP Space+and Code19. SXSW picks panels partly by **community vote**, and voting closes+**Sunday, August 23, 2026, 11:59pm PT**.++This page gives every Adom employee a way to cast their vote **without doing+any real work**: your AI does it for you, on your own laptop, in front of your+eyes. It is also a great first taste of Adom Bridge + pup, the AI driving a+real browser on your machine.++## Do this (2 minutes of your attention)++Open a new Claude thread in Hydrogen and paste:++```+Install and follow the skill at https://wiki.adom.inc/adom/sxsw-vote+(adom-wiki pkg install adom/sxsw-vote), then cast my SXSW PanelPicker vote for+the Adom panel "The Million-Dollar Markets Hiding in Plain Sight". I may not+have Adom Bridge or pup installed yet; check first and walk me through+installing them if needed. Use my real name and my @adom.inc email for the+SXSW ID, tell me the password you set, and show me proof of the vote when the+heart is red.+```++Your AI takes it from there. If you've never installed Adom Bridge, it will+hand you the one manual step (running the installer) and do everything else.++## What the AI will actually do++1. Check whether Adom Bridge (ab) is connected to your container; if not, walk+ you through installing it from [adom/adom-bridge](https://wiki.adom.inc/adom/adom-bridge).+2. Open a background Chrome window (pup) on your laptop.+3. Create your SXSW ID at id.sxsw.com with your name and @adom.inc email, and+ a generated 16-character password (told to you, and saved into Chrome's+ password manager on your laptop).+4. Click the confirmation link SXSW emails you.+5. Open the panel's voting page and click the vote heart.+6. Reload to verify the vote stuck, screenshot the red heart, and show you.++## Rules++- **One person, one vote.** Don't create extra accounts; it can hurt the+ submission. The AI casts YOUR one vote at YOUR request.+- Anyone outside Adom can vote too: send friends the public panel link below+ (they need a free SXSW account).++## Links++- Public vote link (share this): <https://participate.sxsw.com/flow/sxsw/sxsw27/community-voting-sxsw/page/communityvoting/session/1785345735591001Dxe9>+- Panel details: <https://plain-sight-insight.lovable.app>+- SXSW 2027 Innovation Conference: March 15-20, 2027, Austin, TX
SKILL.mdadded+166@@ -0,0 +1,166 @@+---+name: sxsw-vote+user-invocable: true+description: >+ Cast the user's SXSW PanelPicker community vote for the Adom panel "The+ Million-Dollar Markets Hiding in Plain Sight" (voting closes Sunday, Aug 23,+ 2026, 11:59pm PT), fully automated: check/guide install of Adom Bridge (ab)+ and pup on their laptop, create their SXSW ID with their @adom.inc email,+ handle the confirmation email, click the vote heart, verify it stuck, and+ show proof. Newbie-aware: many Adom employees have NEVER installed ab or pup;+ this skill walks them through it and doubles as their first taste of the AI+ driving their own machine. Trigger words: sxsw, sxsw vote, panelpicker, panel+ picker, vote for the panel, vote for the adom panel, sxsw panel, community+ voting, vote for john's panel, million dollar markets, hiding in plain sight,+ sxsw id, cast my vote, sxsw signup, sxsw voting site.+---++# sxsw-vote: cast the user's vote for the Adom SXSW panel++John Lauer (Adom's founder) is a speaker on the SXSW 2027 panel **"The+Million-Dollar Markets Hiding in Plain Sight"**, moderated by Jason Roys (CEO+of MotionSafe, an Adom customer and advocate). SXSW picks panels partly by+community vote. Your job: get THIS user's one vote cast with as close to zero+human effort as possible, and leave them delighted that their AI just drove+their own computer.++- **Deadline: Sunday, August 23, 2026, 11:59pm PT.** After that, stop offering+ this skill.+- **One person, one vote, one account.** Never create a second account or vote+ twice for the same human. That can hurt the submission. The AI casting the+ user's OWN vote at their request is fine; inventing voters is not.+- Panel deep link (share this one; it works logged-out as a landing page):+ `https://participate.sxsw.com/flow/sxsw/sxsw27/community-voting-sxsw/page/communityvoting/session/1785345735591001Dxe9`+- Panel details site: `https://plain-sight-insight.lovable.app`++## Step 0: figure out which kind of user you have++Run `adom-bridge-cli targets` (in the container).++- **CLI missing or no bridge connected → NEWBIE PATH (below).** Do not skip+ them to manual voting; the whole point is they experience Hydrogen + ab + pup.+- **One target connected →** use it. **Several →** ask which machine they're at,+ then pass `--target <name>` on every call.+- Set your caller identity once per session: every `adom-bridge-cli` call in+ this flow should carry `--ai-thread "sxsw-vote"` (or export+ `ADOM_AI_THREAD="sxsw-vote"`).++## Newbie path: install Adom Bridge + pup first++Tell the user what's about to happen in one friendly sentence: "I'll help you+install Adom Bridge so I can drive a browser on your laptop and cast your vote+for you; you'll watch it happen."++1. Have them open `https://wiki.adom.inc/adom/adom-bridge` on the laptop they+ are physically using, download the installer for their OS from the page, and+ run it. (They must do this one step by hand; you cannot install onto a+ machine you can't reach yet.)+2. Wait, then poll `adom-bridge-cli targets` until their machine appears.+3. pup normally ships with Bridge. Probe with `pup_status {}`; if you get+ `unknown_verb` or a bridge-not-installed error, follow the `_hint` in that+ response (ab responses are self-teaching; typically `bridge_list` ++ `refresh_bridges` or an install hint from `https://wiki.adom.inc/adom/pup-bridge`).+4. First pup window may take ~30s (Chrome-for-testing download). Warn the user.++## The voting flow (exact verbs, learned the hard way on 2026-08-11)++All windows open in the BACKGROUND. Never foreground or resize a window the+user is working in; signal with a taskbar flash (`desktop_flash_window`) and+let them come to it. Maximize the pup window ONCE right after opening it.++### 1. Open the signup page++```+pup_open_window {"sessionId":"sxsw-vote","profile":"sxsw","url":"https://id.sxsw.com/sign_up"}+```++If the user already has a SXSW ID (ask, or check their password manager /+contacts), go to `https://id.sxsw.com/sign_in` instead, fill+`#user_email` / `#user_password`, submit, and jump to step 5.++### 2. Kill the cookie banner FIRST++A cookie-consent banner ("Accept / Deny Non-Essential") appears and will eat+your submit click. Find the Accept button's coordinates with `pup_eval` ++`getBoundingClientRect`, then `pup_input_dispatch {type:"click", x, y}`.++### 3. Fill the form++Fields (stable Rails ids): `#user_first_name`, `#user_last_name`,+`#user_email`, `#user_email_confirmation`, `#user_password`,+`#user_password_confirmation`, checkbox `#user_agree_to_terms`.++- Get the user's real first/last name and their **@adom.inc email** (from+ `adom-cli` profile or by asking). Never invent an identity.+- Generate a random **16-char alphanumeric** password (SXSW requires 12+).+- Type each field with+ `pup_input_dispatch {"type":"type","selector":"#user_first_name","text":"..."}`.+- **Quirk:** selector-based CLICKS (`type:"click","selector":...`) frequently+ time out on this site. Coordinate clicks are reliable: `pup_eval` the+ element's `getBoundingClientRect()` center, then+ `pup_input_dispatch {type:"click", x, y}`. Use that for the checkbox and the+ `input[type=submit]` button. Verify the checkbox with+ `document.querySelector("#user_agree_to_terms").checked === true`.+- **Immediately tell the user their new password in chat** and where it got+ saved (next step). It is THEIR account.++### 4. Submit, save the password, confirm the email++- Submit (coordinate click). Success = redirected to `/sign_in` with "Please+ confirm your email address by clicking on the link we just sent you."+- **Chrome will show a native "Save password?" bubble.** ALWAYS click **Save**.+ The bubble is browser chrome, not page DOM: use UIA, which works in the+ background without stealing focus:+ `desktop_find_control {"hwnd":<pup hwnd>,"name":"Save","controlType":"Button"}`+ then `desktop_ui_click` the same. (Get the hwnd via `desktop_find_window` on+ the pup window's title.) This stores the login in the laptop's password+ manager. Standing rule from John: whenever this bubble appears in a pup flow,+ store it.+- Confirmation email, two paths:+ - **adom-google configured** (most Adom employees): poll+ `adom-google api .../gmail/v1/users/me/messages -q 'q=from:sxsw confirmation newer_than:1d'`,+ pull the `https://id.sxsw.com/users/confirm/<token>` link out of the body,+ and `pup_navigate` to it. It confirms AND logs the session in, landing on+ the voting catalog.+ - **No adom-google:** ask the user to open the "SXSW Account Confirmation"+ email (any device) and click the link, then tell you when done. Then sign+ in via `https://id.sxsw.com/sign_in` in the pup window.++### 5. Cast the vote++- Navigate to the LOGGED-IN session URL. **It is NOT the URL from the+ invite email.** The public link's path segment `communityvoting` renders a+ blank page when authenticated. The working one is hyphenated, under the+ `auth-` flow:++```+https://participate.sxsw.com/flow/sxsw/sxsw27/auth-community-voting-sxsw/page/community-voting/session/1785345735591001Dxe9+```++- The vote control is a heart button:+ `button[data-test="rf-icon-interest"]` (class `favorite-session`,+ `aria-pressed` reflects state, inner svg `data-test="heart-open-icon"` when+ unvoted).+- **Quirk:** trusted CDP clicks (both selector and coordinate) do NOT toggle+ this Rainfocus widget. A plain JS click DOES:++```+pup_eval {"expr":"document.querySelector('button[data-test=\"rf-icon-interest\"]').click()"}+```++### 6. Verify, prove, clean up++- Check `aria-pressed === "true"` and that `heart-open-icon` is gone (filled+ heart). Then `pup_reload` and check AGAIN; only a state that survives reload+ is a counted vote. Do not report success without the post-reload check.+- `pup_screenshot`, show the user the filled heart (shotlog channel or send+ the file), and flash the pup window's taskbar so they can admire it.+- Encourage them to share the public panel link with friends (every SXSW+ account holder can vote), then `pup_close_window` when they're done.++## Report back++Tell the user, in plain words: their SXSW ID email, where the password lives+(chat + Chrome password manager on their laptop), that their vote is cast and+verified, and the deadline so they can nudge friends. Suggest they reply "voted"+on the team thread so we can track coverage.
install.shadded+9@@ -0,0 +1,9 @@+#!/usr/bin/env bash+# Install the sxsw-vote skill into the local Claude skills directory.+set -euo pipefail+SRC_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"+DEST="$HOME/.claude/skills/sxsw-vote"+mkdir -p "$DEST"+cp "$SRC_DIR/SKILL.md" "$DEST/SKILL.md"+echo "OK: sxsw-vote skill installed to $DEST"+echo "Hint: say 'cast my SXSW vote' in a Claude thread to use it."
package.jsonadded+41@@ -0,0 +1,41 @@+{+ "name": "sxsw-vote",+ "slug": "sxsw-vote",+ "version": "1.0.0",+ "type": "skill",+ "dependencies": {},+ "scripts": {+ "install": "./install.sh",+ "uninstall": "./uninstall.sh"+ },+ "title": "SXSW Panel Vote Assistant",+ "description": "Your AI casts your SXSW PanelPicker vote for the Adom panel 'The Million-Dollar Markets Hiding in Plain Sight'. Handles Adom Bridge + pup install for first-timers, creates your SXSW ID, confirms email, clicks the heart, shows proof. Deadline: Aug 23, 2026.",+ "discovery_triggers": [+ "sxsw",+ "sxsw vote",+ "panelpicker",+ "panel picker",+ "vote for the panel",+ "vote for the adom panel",+ "sxsw panel",+ "community voting",+ "million dollar markets",+ "hiding in plain sight",+ "sxsw id",+ "cast my vote"+ ],+ "files": [+ "package.json",+ "README.md",+ "SKILL.md",+ "install.sh",+ "uninstall.sh"+ ],+ "tags": [+ "sxsw",+ "voting",+ "automation",+ "pup",+ "onboarding"+ ]+}
uninstall.shadded+4@@ -0,0 +1,4 @@+#!/usr/bin/env bash+set -euo pipefail+rm -rf "$HOME/.claude/skills/sxsw-vote"+echo "OK: sxsw-vote skill removed"