░▒▓███████▓▒░░▒▓█▓▒░░▒▓█▓▒░▒▓███████▓▒░░▒▓████████▓▒░                                             
░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░                                                    
░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░                                                    
░▒▓███████▓▒░░▒▓█▓▒░░▒▓█▓▒░▒▓███████▓▒░░▒▓██████▓▒░                                               
░▒▓█▓▒░      ░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░                                                    
░▒▓█▓▒░      ░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░                                                    
░▒▓█▓▒░       ░▒▓██████▓▒░░▒▓█▓▒░░▒▓█▓▒░▒▓████████▓▒░                                             
                                                                                                  
                                                                                                  
░▒▓█▓▒░▒▓███████▓▒░▒▓████████▓▒░▒▓████████▓▒░▒▓███████▓▒░░▒▓███████▓▒░░▒▓████████▓▒░▒▓████████▓▒░ 
░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░ ░▒▓█▓▒░   ░▒▓█▓▒░      ░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░         ░▒▓█▓▒░     
░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░ ░▒▓█▓▒░   ░▒▓█▓▒░      ░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░         ░▒▓█▓▒░     
░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░ ░▒▓█▓▒░   ░▒▓██████▓▒░ ░▒▓███████▓▒░░▒▓█▓▒░░▒▓█▓▒░▒▓██████▓▒░    ░▒▓█▓▒░     
░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░ ░▒▓█▓▒░   ░▒▓█▓▒░      ░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░         ░▒▓█▓▒░     
░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░ ░▒▓█▓▒░   ░▒▓█▓▒░      ░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░         ░▒▓█▓▒░     
░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░ ░▒▓█▓▒░   ░▒▓████████▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓████████▓▒░  ░▒▓█▓▒░     
                                                                                                  
                                                                                                  

This page is a txt file hosted on Bluesky's AtProto. Yes, that's right.

>> NO HTML, NO CSS, NO JS. JUST PLAIN TEXT. PURE INTERNET. <<

-------------------------------------------------------------------------------
                               HOW DOES THIS WORK?
-------------------------------------------------------------------------------

Well, it is a plain text file. If you inspect the page source you should see 
exactly what is rendered in the browser — no HTML.

The hosting is where it gets tricky. This is pulling from some of my prior work:
  → https://iammatthias.com/posts/1732585567703-pure-internet-bluesky
  
Which in turn was inspired by Daniel Mangum's work:
  → https://danielmangum.com/posts/this-website-is-hosted-on-bluesky/

-------------------------------------------------------------------------------
                         TECHNICAL IMPLEMENTATION
-------------------------------------------------------------------------------

This page is a plain text file (.txt) hosted on Bluesky's AtProto network. 
While AtProto doesn't directly support the `text/plain` MIME type for blobs, 
we can work around this by using the `text/markdown` MIME type while still 
maintaining a pure text file experience.

===============================================================================
                     HOW TO HOST YOUR OWN TEXT FILE
===============================================================================

Here's how you can host your own text file on Bluesky:

## Step 1: Authentication

First, you'll need to authenticate with Bluesky to get the necessary credentials:

```bash
# Set your Bluesky credentials
export BSKY_HANDLE="your-handle.bsky.social"
export BSKY_PWD="your-password"

# Generate an access token
curl -X POST 'https://bsky.social/xrpc/com.atproto.server.createSession' \
  -H 'Content-Type: application/json' \
  -d '{"identifier": "'"$BSKY_HANDLE"'", "password": "'"$BSKY_PWD"'"}'
```

From the response, save these important values:
- `ACCESS_JWT`: Your access token
- `DID`: Your decentralized identifier
- `PDS`: Your Personal Data Server endpoint (look for `serviceEndpoint` in the `didDoc`)

## Step 2: Create Your Text Content

Create a simple text file with your desired content:

```bash
# Create your text file
echo "Pure Internet" > index.txt
```

## Step 3: Upload Your Content

Upload your text file using the `text/markdown` MIME type (since AtProto doesn't directly support `text/plain`):

```bash
# Upload the file
curl -X POST "$PDS/xrpc/com.atproto.repo.uploadBlob" \
  -H "Authorization: Bearer $ACCESS_JWT" \
  -H "Content-Type: text/markdown" \
  --data-binary "@index.txt"
```

From the response, save the `$link` value within the `ref` object as `LINK`.

## Step 4: Create a Record

Create a record in your repository that references the uploaded blob:

```bash
curl -X POST "$PDS/xrpc/com.atproto.repo.createRecord" \
  -H "Authorization: Bearer $ACCESS_JWT" \
  -H "Content-Type: application/json" \
  -d '{
    "repo": "'"$DID"'",
    "collection": "app.bsky.feed.post",
    "record": {
      "$type": "app.bsky.feed.post",
      "text": "I just hosted a plain text file on Bluesky!",
      "createdAt": "'"$(date -u +%Y-%m-%dT%H:%M:%S.%NZ)"'",
      "embed": {
        "$type": "app.bsky.embed.external",
        "external": {
          "uri": "https://bsky.social/xrpc/com.atproto.sync.getBlob?did='"$DID"'&cid='"$LINK"'",
          "title": "Pure Internet: No HTML Edition",
          "description": "A plain text file hosted on Bluesky"
        }
      }
    }
  }'
```

## Step 5: Access Your Content

Your text content is now accessible at:
```
https://$PDS/xrpc/com.atproto.sync.getBlob?did=$DID&cid=$LINK
```

Where:
  • $PDS is your Personal Data Server domain (without the protocol)
  • $DID is your decentralized identifier
  • $LINK is the content identifier from the upload response

When someone visits this URL, they'll see your plain text file rendered directly 
in the browser - no HTML, CSS, or JavaScript involved.