Deploy your own Twitter-look-alike Bluesky client to GitHub Pages to browse your feed with the familiar old Twitter layout
Fork the project and restyle it to build your own custom Bluesky client with a different visual theme or feature set
Learn how to connect a Next.js application to the AT Protocol API to implement social features like feeds, profiles, likes, and reposts
OAuth tokens in local dev are short-lived, use 127.0.0.1 (not localhost) for the callback URL or the OAuth flow will fail.
Not Twitter is a Bluesky client that deliberately mimics the visual design and layout of old Twitter. The idea is to give Bluesky users the timeline experience they remember from Twitter, without any of the changes that came after Twitter rebranded to X. The project is built on Next.js, React, and Tailwind CSS, and connects to Bluesky through the AT Protocol API. The interface covers the features you would expect from a basic social timeline: your home feed, individual profiles, replies, likes, reposts, followers, a search page, image uploads, and local bookmarks. Theme preferences are saved locally in the browser. The data all comes from Bluesky, not from X. To run it yourself, you install the dependencies with npm, start the local dev server, and sign in with your Bluesky handle or DID (a Bluesky account identifier). If you run a self-hosted AT Protocol personal data server, you can point the app at your own server by setting an environment variable before starting. The README notes that OAuth tokens in local development are short-lived, and advises using the 127.0.0.1 loopback address rather than localhost for that flow to work correctly. A GitHub Pages deployment workflow is included in the repo. Running the export command builds a static version of the site, and the workflow handles setting the correct base path and generating the AT Protocol OAuth client metadata file for the Pages URL automatically. For deployments elsewhere, you set an environment variable with a URL pointing to your own hosted OAuth client metadata. The README is written with a dry, self-aware sense of humor about the whole premise. Internal code still uses Twitter-era variable names like tweet because the authors decided renaming them would not be a good use of time.
← erickrouss on gitmyhub — every repo by this author, as a profile.
Verify against the repo before relying on details.