Save now. Read never. Find always.
For people who bookmark everything and read nothing. A Twitter/X bookmark manager that actually helps you find that tweet you saved 6 months ago.
Save tweets instantly by adding adh before any x.com URL:
x.com/user/status/123456789
β
adhx.com/user/status/123456789
The tweet is saved to your collection and opens in the lightbox. It's that easy. Your future self will thank you. Probably.
| Feature | Description |
|---|---|
| πΏοΈ Hoard Mode | Sync up to 800 bookmarks from Twitter/X. No judgment here. |
| πΌοΈ Gallery View | Visual masonry grid with hover previews for videos |
| π Actually Find Stuff | Full-text search that works. Revolutionary, we know. |
| π·οΈ Tag Everything | Custom tags to organize your chaos (or don't, we won't tell) |
| β Read Tracking | Mark bookmarks as read so you know what you've |
| π Article Support | Full rendering of X Articles with rich text and images |
| β¨οΈ Keyboard Shortcuts | β β to browse, R/U for read/unread, Esc to close |
| π€ ADHD-Friendly Fonts | Choose from 4 fonts designed for readability (Lexend, Atkinson Hyperlegible, etc.) |
| π Bionic Reading | Bold the first part of each word to help your eyes flow |
| π₯ Multi-User Ready | Each user gets their own bookmarks, tags, and read status |
- Node.js 20+
- pnpm
- Twitter/X Developer Account (for OAuth credentials)
- A concerning number of unread bookmarks
# Clone the repo
git clone https://github.com/itsmemeworks/adhx
cd adhx
# Install dependencies
pnpm install
# Copy environment template
cp .env.example .env
# Start dev server
pnpm devOpen http://localhost:3000 and connect your Twitter/X account.
Create a .env file:
# Twitter OAuth 2.0 credentials (from developer.twitter.com)
TWITTER_CLIENT_ID=your_client_id
TWITTER_CLIENT_SECRET=your_client_secret
# App URL (for OAuth callback)
NEXT_PUBLIC_APP_URL=http://localhost:3000
# Session security (generate a random string)
SESSION_SECRET=your-secret-key-here- Go to developer.twitter.com
- Create a new project and app
- Enable OAuth 2.0 with PKCE
- Set callback URL to
http://localhost:3000/api/auth/twitter/callback - Copy the Client ID and Client Secret
- Try not to get distracted by your timeline
| Layer | Technology |
|---|---|
| Framework | Next.js 15 (App Router) + React 19 |
| Database | SQLite + Drizzle ORM (multi-user ready) |
| Styling | Tailwind CSS |
| Auth | Twitter OAuth 2.0 PKCE + JWT sessions |
| Deployment | Fly.io with automated releases |
| Testing | Vitest |
pnpm dev # Start dev server
pnpm build # Production build
pnpm test # Run tests
pnpm test:watch # Run tests in watch mode
pnpm typecheck # TypeScript check
pnpm db:migrate # Run database migrationsADHX is configured for deployment on Fly.io with persistent SQLite storage.
# Install Fly CLI
curl -L https://fly.io/install.sh | sh
# Login to Fly
fly auth login# Create the app (first time only)
fly apps create your-app-name
# Create persistent volume for SQLite database
fly volumes create adhx_data --region lhr --size 1
# Set secrets (replace with your domain)
fly secrets set TWITTER_CLIENT_ID=your_client_id
fly secrets set TWITTER_CLIENT_SECRET=your_client_secret
fly secrets set SESSION_SECRET=$(openssl rand -base64 32)
fly secrets set NEXT_PUBLIC_APP_URL=https://your-app-name.fly.dev
# Deploy
fly deploy- Update your Twitter app's callback URL to match your domain:
- Local:
http://localhost:3000/api/auth/twitter/callback - Fly.io:
https://your-app-name.fly.dev/api/auth/twitter/callback
- Local:
- Visit your app URL and connect your Twitter account
Releases are automated via Release Please:
- Merge PRs with conventional commits to
main - Release Please creates/updates a release PR with changelog
- Merge the release PR β automatically deploys to Fly.io
Manual deploy: gh workflow run deploy.yml
ADHX ships as an Agent Skill β an open, portable format for giving AI agents new capabilities. Paste any X/Twitter link into your agent of choice and it can fetch the post as clean JSON, no browser or scraping needed.
The adhx skill follows the agentskills.io specification, so it works across any skills-compatible agent, including: Claude Code, Claude, Cursor, Gemini CLI, OpenCode, OpenAI Codex, GitHub Copilot, Goose, Kiro, VS Code (Copilot), Letta, Factory, Roo Code, Amp, and more.
π Skill source: skills/adhx/SKILL.md
The skill is a single folder you drop into your agent's skills directory. Location varies by agent:
| Agent | Skills directory |
|---|---|
| Claude Code | ~/.claude/skills/ |
| Claude (web/desktop) | Settings β Skills β Upload |
| Cursor | .cursor/skills/ (project) or ~/.cursor/skills/ (global) |
| Gemini CLI | ~/.gemini/skills/ |
| OpenCode | ~/.config/opencode/skills/ |
| OpenAI Codex | ~/.codex/skills/ |
| GitHub Copilot / VS Code | .github/skills/ (workspace) |
| Goose | ~/.config/goose/skills/ |
Check your agent's docs if your client isn't listed β the install path may differ, but the skill file itself is identical everywhere.
One-line install (replace <SKILLS_DIR> with the path from the table above):
mkdir -p <SKILLS_DIR>/adhx && \
curl -sL https://raw.githubusercontent.com/itsmemeworks/adhx/main/skills/adhx/SKILL.md \
-o <SKILLS_DIR>/adhx/SKILL.mdClaude Code marketplace (shortcut for Claude Code users):
/plugin marketplace add itsmemeworks/adhx
/plugin install adhxRe-run the same install command β it overwrites the existing SKILL.md with the latest version. For the Claude Code marketplace install, use /plugin update adhx.
# Example for Claude Code
curl -sL https://raw.githubusercontent.com/itsmemeworks/adhx/main/skills/adhx/SKILL.md \
-o ~/.claude/skills/adhx/SKILL.mdOnce installed, paste any X link into your agent and ask it to read/summarize/analyze:
> Read this and give me the key takeaways https://x.com/dgt10011/status/2020167690560647464
The agent will automatically call the ADHX public API and return structured JSON with the full post content, author info, and engagement metrics β including long-form X Articles.
GET https://adhx.com/api/share/tweet/{username}/{statusId}
No auth required. Works with x.com, twitter.com, and adhx.com URLs.
We welcome contributions! Whether you're fixing bugs, adding features, or just improving docs.
Quick start:
- Fork the repo
- Create a branch (
git checkout -b feat/amazing-feature) - Make your changes
- Commit with conventional commits (
git commit -m 'feat: add amazing feature') - Push and open a PR
See CONTRIBUTING.md for detailed guidelines.
We use conventional commits for automatic versioning:
feat: add new feature # β Minor version bump
fix: resolve bug # β Patch version bump
feat!: breaking change # β Major version bumpsrc/
βββ app/ # Next.js App Router
β βββ api/ # API routes
β β βββ auth/ # Twitter OAuth flow
β β βββ bookmarks/ # Bookmark CRUD
β β βββ feed/ # Main feed endpoint
β β βββ sync/ # Sync with Twitter
β βββ settings/ # Settings page
β βββ page.tsx # Main feed page
βββ components/
β βββ feed/ # Feed components
β βββ ...
βββ lib/
βββ db/ # Database schema
βββ auth/ # OAuth utilities
βββ media/ # FxTwitter integration
Found a security issue? Please report it privately. See SECURITY.md for details.
MIT Β© ADHX
Built for people who save tweets about productivity while procrastinating.
adhx.com