explaingit

erickrouss/not-twitter

19TypeScriptAudience · developerComplexity · 3/5Setup · moderate

TLDR

Not Twitter is a Bluesky client that deliberately looks and feels like old Twitter, letting you browse your Bluesky feed, profiles, and timeline using the interface you remember before X redesigned everything.

Mindmap

mindmap
  root((not-twitter))
    Interface
      Old Twitter layout
      Home feed timeline
      Profiles and replies
      Local bookmarks
    Features
      Likes and reposts
      Image uploads
      Search page
      Theme saved locally
    Tech stack
      Next.js React
      Tailwind CSS
      AT Protocol API
    Deploy
      GitHub Pages workflow
      Self-hosted AT server
      Static export support
Click or tap to explore — scroll the page freely

Code map

Detail Auto

An interactive map of this repo's files and how they connect — its source is parsed live in your browser. Click Visualize to build it.

filefunction / class

Things people build with this

USE CASE 1

Deploy your own Twitter-look-alike Bluesky client to GitHub Pages to browse your feed with the familiar old Twitter layout

USE CASE 2

Fork the project and restyle it to build your own custom Bluesky client with a different visual theme or feature set

USE CASE 3

Learn how to connect a Next.js application to the AT Protocol API to implement social features like feeds, profiles, likes, and reposts

Tech stack

TypeScriptNext.jsReactTailwind CSSAT Protocol

Getting it running

Difficulty · moderate Time to first run · 30min

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.

No license information is stated in the repository.

In plain English

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.

Copy-paste prompts

Prompt 1
I forked erickrouss/not-twitter and want to add a notifications tab that shows my Bluesky mentions and replies. Walk me through which AT Protocol API endpoints to call and how to wire them into the existing Next.js routing.
Prompt 2
Show me how not-twitter handles the AT Protocol OAuth flow in local development and explain why it needs 127.0.0.1 instead of localhost for the callback URL.
Prompt 3
I want to deploy not-twitter to Vercel instead of GitHub Pages. What environment variables do I need to set and how do I generate the AT Protocol OAuth client metadata file for my Vercel URL?
Prompt 4
Help me understand how not-twitter's GitHub Pages workflow sets the correct base path for the Next.js static export so all assets load correctly from a sub-path URL.
Open on GitHub → Explain another repo

← erickrouss on gitmyhub — every repo by this author, as a profile.

Verify against the repo before relying on details.