Sharing from Phone¶
Share articles from any app on your phone directly into your next intake digest. The flow:
Copy URL → Run Shortcut (Back Tap) → Distill saves it → Next intake digest includes it
How it works¶
- You copy a URL on your phone (from X, Safari, LinkedIn, etc.)
- An iOS Shortcut reads your clipboard and sends it to the Distill API
- The URL is saved to
.distill-shares.jsonin your output directory - When the next intake pipeline runs, it fetches the full article text and includes it with priority in the digest
- You can read the extracted content in the Shares page of the dashboard
Prerequisites¶
- Distill dashboard running on your Mac
- Tailscale connecting your phone and Mac (see PWA setup)
- Your server's Tailscale address (e.g.,
100.x.x.xoryour-mac.ts.net)
Step 1: Find your sharing URL¶
Your sharing endpoint is:
For example: http://100.64.0.1:6107/api/shares?url=
Store this in your config
Add your hostname to .distill.toml so the Settings page shows the correct URL:
Step 2: Create the iOS Shortcut¶
- Open the Shortcuts app on your iPhone
- Tap + to create a new shortcut
- Add these actions in order:
Action 1: Get Clipboard¶
- Search for "Get Clipboard" and add it
Action 2: Get Contents of URL¶
- Search for "Get Contents of URL"
- Set the URL to:
- Tap on the URL field and append the Clipboard variable after
?url= - The final URL should look like:
http://100.64.0.1:6107/api/shares?url=[Clipboard]
Action 3: Show Notification¶
- Search for "Show Notification"
-
Set the message to:
Saved to Distill -
Name the shortcut "Send to Distill"
- Tap Done
Step 3: Set up Back Tap (optional, recommended)¶
Instead of opening the Shortcuts app each time, trigger it with a double-tap on the back of your phone:
- Go to Settings > Accessibility > Touch > Back Tap
- Choose Double Tap or Triple Tap
- Scroll down to Shortcuts and select "Send to Distill"
Now the workflow is:
- See an interesting article in any app
- Copy the URL (long-press the link, tap Copy)
- Double-tap the back of your phone
- See the "Saved to Distill" notification
What happens to shared URLs¶
During intake pipeline¶
When distill intake or distill run executes:
- Shared URLs are loaded from
.distill-shares.json - Full article text is extracted (using trafilatura for web articles, FixTweet API for X/Twitter posts)
- Content is auto-tagged and classified
- Shared links get priority — they're always covered in the digest, before feed items
- Extracted content (title, author, full text) is saved back to the share record
- Shares are marked as "used" after being included in a digest
In the dashboard¶
The Shares page (/shares) shows:
- Pending shares — waiting for the next intake run
- Processed shares — already included in a digest, with extracted content
Click any card to open the full article reader with formatted markdown content.
X/Twitter support¶
Sharing X/Twitter links works automatically. Distill uses the FixTweet API to extract:
- Tweet text
- X Articles (long-form posts)
- Linked article content (resolves t.co redirects and fetches the real article)
No Twitter API key needed.
CLI alternative¶
You can also share URLs from your terminal:
List pending shares:
API reference¶
The shares API accepts both GET (for iOS Shortcuts) and POST (for programmatic use):
# Save a URL (GET — for iOS Shortcuts)
curl "http://localhost:6107/api/shares?url=https://example.com/article"
# Save a URL (POST — with note)
curl -X POST http://localhost:6107/api/shares \
-H "Content-Type: application/json" \
-d '{"url": "https://example.com/article", "note": "check this out"}'
# List all shares
curl http://localhost:6107/api/shares
# Delete a share
curl -X DELETE http://localhost:6107/api/shares/<id>
Troubleshooting¶
Shortcut says "Could not connect to server"
- Make sure Tailscale is connected on both devices
- Verify the server is running:
curl http://<tailscale-ip>:6107/api/shares - Try using the numeric IP instead of hostname
URL not appearing in dashboard?
- Open
http://<your-address>:6107/sharesand check if it's listed - The shortcut uses the clipboard — make sure you copied the URL before running it
Content shows "not fetched"?
- Content is extracted during the intake pipeline run, not at share time
- Run
uv run python -m distill intake --output ./insightsto trigger enrichment - Some sites block scraping — the article text may not be extractable