# Dhvanil > Personal website of Dhvanil (@dhvanil on X, previously @dhvanilp). Contains PB29, a blog, reading list, AI projects, microscopy photography, and a complete Twitter/X archive spanning 2014-present with 5,000+ tweets. ## About Dhvanil is a technologist interested in AI, startups, philosophy, and science. This website serves as a personal archive and portfolio. The Twitter archive contains over a decade of thoughts, opinions, and conversations. Key facts: - Twitter handle: @dhvanil (changed from @dhvanilp) - Archive period: May 2014 - present - Total tweets: ~5,158 - Location: Previously India, currently Germany ## PB29 PB29 is Dhvanil's observable robotic painting-arm project, named after the Colour Index code for ultramarine and built around a UFactory xArm 7. It sits inside a wider painting practice, but the public packet focuses on the physical mark-making system: perception, calibration, safe motion, primitives, and feedback. - [Complete PB29 context packet](https://dhvanil.com/pb29.txt): The recommended one-file briefing for AI agents, including the rig, calibration stack, current state, milestone log, architecture, safety rules, images, open questions, and the complete reconciled equipment ledger - [Human-facing PB29 page](https://dhvanil.com/pb29): The xArm rig, glass-box system, and physical drawing evidence - [Painting supplies](https://dhvanil.com/painting-supplies.txt): Exact material inventory ## API Reference All endpoints use GET requests, return JSON, and require no authentication. Base URL: `https://personal-website-backend.me-d97.workers.dev` ### GET /api/tweets/llm **Purpose:** Single endpoint optimized for LLM consumption. Returns everything an LLM needs in one request. **Query Parameters:** - `recent_limit` (default: 20, max: 100): Number of recent tweets - `popular_limit` (default: 10, max: 50): Number of popular tweets **Response:** - `summary`: Overview with handle, total tweets, date range, primary topics, short bio - `recent_tweets`: Latest original tweets - `popular_tweets`: Most engaged tweets - `topic_distribution`: Top 30 topics - `api_guide`: Links to other endpoints for further exploration **Example:** ``` GET /api/tweets/llm GET /api/tweets/llm?recent_limit=50&popular_limit=20 ``` --- ### GET /api/tweets **Purpose:** Unified endpoint for listing, filtering, and searching tweets. **Query Parameters:** | Parameter | Type | Default | Description | |-----------|------|---------|-------------| | `limit` | integer | 50 | Results per page (max: 200) | | `offset` | integer | 0 | Pagination offset | | `year` | integer | - | Filter by year (e.g., 2024) | | `month` | integer | - | Filter by month (1-12, requires year) | | `type` | string | all | `original`, `reply`, `retweet`, `quote`, `all` | | `hasMedia` | boolean | - | Only tweets with images/videos | | `minLikes` | integer | 0 | Minimum like count | | `lang` | string | - | ISO language code (e.g., `en`) | | `sort` | string | desc | `desc` (newest), `asc` (oldest), `popular` | | `include` | string | - | `entities`, `media`, `topics` (comma-separated) | | `q` | string | - | Search query (lexical search) | | `searchMode` | string | lexical | `lexical` or `semantic` (semantic coming soon) | | `topic` | string | - | Filter by topic name (e.g., `AI`) | **Examples:** ``` GET /api/tweets?limit=100&year=2024&type=original GET /api/tweets?q=artificial+intelligence&searchMode=lexical GET /api/tweets?topic=AI&sort=popular&limit=20 GET /api/tweets?sort=popular&minLikes=10&type=original GET /api/tweets?year=2023&month=6&include=entities,media ``` **Response:** ```json { "tweets": [ { "id": "1943606968733639036", "full_text": "Tweet content here...", "tweet_type": "original", "tweeted_at": "2025-07-11T09:43:06.000Z", "lang": "en", "favorite_count": 8, "retweet_count": 0, "thread_id": null, "is_thread_start": false } ], "pagination": { "limit": 50, "offset": 0, "next_offset": 50, "has_more": true, "total": 5158 }, "query": { "q": null, "search_mode": null, "year": 2024, "topic": null, "type": "original", "sort": "desc" } } ``` --- ### GET /api/tweets/:id **Purpose:** Get a single tweet with full details. **Query Parameters:** - `include` - `entities`, `media`, `topics` **Example:** ``` GET /api/tweets/1943606968733639036 GET /api/tweets/1943606968733639036?include=entities,media ``` **Response:** ```json { "tweet": { /* Tweet object */ } } ``` --- ### GET /api/tweets/:id/thread **Purpose:** Get a complete thread containing this tweet (returns all tweets in the thread, even if :id is not the root). **Example:** ``` GET /api/tweets/1943606968733639036/thread ``` **Response:** ```json { "thread_id": "1943606968733639036", "tweets": [ /* Tweet[], sorted oldest to newest */ ] } ``` --- ### GET /api/tweets/stats **Purpose:** Aggregate statistics about the tweet archive. **Response:** ```json { "total": 5158, "by_type": { "original": 1658, "reply": 1958, "retweet": 1542 }, "by_year": { "2014": 540, "2015": 567, "2016": 668, "2017": 418, "2018": 323, "2019": 1022, "2020": 759, "2021": 355, "2022": 97, "2023": 48, "2024": 66, "2025": 295 }, "threads": 212, "with_media": 904 } ``` --- ### GET /api/tweets/topics **Purpose:** List topics for filtering via `/api/tweets?topic=...`. **Query Parameters:** - `limit` (default: 50, max: 200) - `minCount` (default: 1): Minimum tweet count - `source` (default: all): `all`, `hashtag`, `llm`, `manual` **Example:** ``` GET /api/tweets/topics?limit=20&minCount=5 ``` **Response:** ```json { "topics": [ { "topic": "AI", "source": "hashtag", "count": 156 }, { "topic": "startups", "source": "hashtag", "count": 89 } ] } ``` --- ### GET /api/tweets/memories **Purpose:** "On this day" - get tweets from a specific date across all years. **Query Parameters:** - `date` (default: today): `MM-DD` format (e.g., `12-01` for December 1st) **Example:** ``` GET /api/tweets/memories?date=07-11 ``` **Response:** ```json { "date": "07-11", "tweets": [ /* Tweet[] from July 11 across all years */ ] } ``` --- ## Usage Examples for LLMs **"What are Dhvanil's main interests?"** ``` GET /api/tweets/llm -> Check "primary_topics" and "topic_distribution" in response ``` **"What has Dhvanil said about AI?"** ``` GET /api/tweets?q=AI&sort=popular&limit=50 ``` **"Show me Dhvanil's thoughts from 2023"** ``` GET /api/tweets?year=2023&type=original&limit=100 ``` **"What are his most popular opinions?"** ``` GET /api/tweets?sort=popular&limit=20&type=original ``` **"Get a specific thread"** ``` GET /api/tweets/1943254875480977876/thread ``` --- ## Other Content ### Books Access reading list via `/api/books`. Returns 298 books with ratings, authors, and categories. ### AI Projects Access AI experiments via `/api/ai`. Includes generative art and model experiments. ### Microscopy Access microscopy photography via `/api/microscopy`. Scientific photography collection.