feat: init 0957a831
Steve · 2025-09-29 09:21 23 file(s) · +523 −0
.gitignore (added) +38 −0
1 +
# dependencies (bun install)
2 +
node_modules
3 +
4 +
# output
5 +
out
6 +
dist
7 +
site-dist
8 +
*.tgz
9 +
10 +
# code coverage
11 +
coverage
12 +
*.lcov
13 +
14 +
# logs
15 +
logs
16 +
_.log
17 +
report.[0-9]_.[0-9]_.[0-9]_.[0-9]_.json
18 +
19 +
# dotenv environment variable files
20 +
.env
21 +
.env.development.local
22 +
.env.test.local
23 +
.env.production.local
24 +
.env.local
25 +
26 +
# caches
27 +
.eslintcache
28 +
.cache
29 +
*.tsbuildinfo
30 +
31 +
# IntelliJ based IDEs
32 +
.idea
33 +
34 +
# Finder (MacOS) folder config
35 +
.DS_Store
36 +
37 +
# Misc
38 +
Notes.md
CLAUDE.md (added) +107 −0
1 +
---
2 +
3 +
Default to using Bun instead of Node.js.
4 +
5 +
- Use `bun <file>` instead of `node <file>` or `ts-node <file>`
6 +
- Use `bun test` instead of `jest` or `vitest`
7 +
- Use `bun build <file.html|file.ts|file.css>` instead of `webpack` or `esbuild`
8 +
- Use `bun install` instead of `npm install` or `yarn install` or `pnpm install`
9 +
- Use `bun run <script>` instead of `npm run <script>` or `yarn run <script>` or `pnpm run <script>`
10 +
- Bun automatically loads .env, so don't use dotenv.
11 +
12 +
## APIs
13 +
14 +
- `Bun.serve()` supports WebSockets, HTTPS, and routes. Don't use `express`.
15 +
- `bun:sqlite` for SQLite. Don't use `better-sqlite3`.
16 +
- `Bun.redis` for Redis. Don't use `ioredis`.
17 +
- `Bun.sql` for Postgres. Don't use `pg` or `postgres.js`.
18 +
- `WebSocket` is built-in. Don't use `ws`.
19 +
- Prefer `Bun.file` over `node:fs`'s readFile/writeFile
20 +
- Bun.$`ls` instead of execa.
21 +
22 +
## Testing
23 +
24 +
Use `bun test` to run tests.
25 +
26 +
```ts#index.test.ts
27 +
import { test, expect } from "bun:test";
28 +
29 +
test("hello world", () => {
30 +
  expect(1).toBe(1);
31 +
});
32 +
```
33 +
34 +
## Frontend
35 +
36 +
Use HTML imports with `Bun.serve()`. Don't use `vite`. HTML imports fully support React, CSS, Tailwind.
37 +
38 +
Server:
39 +
40 +
```ts#index.ts
41 +
import index from "./index.html"
42 +
43 +
Bun.serve({
44 +
  routes: {
45 +
    "/": index,
46 +
    "/api/users/:id": {
47 +
      GET: (req) => {
48 +
        return new Response(JSON.stringify({ id: req.params.id }));
49 +
      },
50 +
    },
51 +
  },
52 +
  // optional websocket support
53 +
  websocket: {
54 +
    open: (ws) => {
55 +
      ws.send("Hello, world!");
56 +
    },
57 +
    message: (ws, message) => {
58 +
      ws.send(message);
59 +
    },
60 +
    close: (ws) => {
61 +
      // handle close
62 +
    }
63 +
  },
64 +
  development: {
65 +
    hmr: true,
66 +
    console: true,
67 +
  }
68 +
})
69 +
```
70 +
71 +
HTML files can import .tsx, .jsx or .js files directly and Bun's bundler will transpile & bundle automatically. `<link>` tags can point to stylesheets and Bun's CSS bundler will bundle.
72 +
73 +
```html#index.html
74 +
<html>
75 +
  <body>
76 +
    <h1>Hello, world!</h1>
77 +
    <script type="module" src="./frontend.tsx"></script>
78 +
  </body>
79 +
</html>
80 +
```
81 +
82 +
With the following `frontend.tsx`:
83 +
84 +
```tsx#frontend.tsx
85 +
import React from "react";
86 +
87 +
// import .css files directly and it works
88 +
import './index.css';
89 +
90 +
import { createRoot } from "react-dom/client";
91 +
92 +
const root = createRoot(document.body);
93 +
94 +
export default function Frontend() {
95 +
  return <h1>Hello, world!</h1>;
96 +
}
97 +
98 +
root.render(<Frontend />);
99 +
```
100 +
101 +
Then, run index.ts
102 +
103 +
```sh
104 +
bun --hot ./index.ts
105 +
```
106 +
107 +
For more information, read the Bun API docs in `node_modules/bun-types/docs/**.md`.
LICENSE (added) +21 −0
1 +
MIT License
2 +
3 +
Copyright (c) 2025 Steve Simkins
4 +
5 +
Permission is hereby granted, free of charge, to any person obtaining a copy
6 +
of this software and associated documentation files (the "Software"), to deal
7 +
in the Software without restriction, including without limitation the rights
8 +
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 +
copies of the Software, and to permit persons to whom the Software is
10 +
furnished to do so, subject to the following conditions:
11 +
12 +
The above copyright notice and this permission notice shall be included in all
13 +
copies or substantial portions of the Software.
14 +
15 +
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 +
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 +
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 +
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 +
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 +
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 +
SOFTWARE.
README.md (added) +67 −0
1 +
# Norns
2 +
3 +
![cover](site/og.png)
4 +
5 +
Interoperable web components for decentralized applications
6 +
7 +
## Overview and Reasoning
8 +
9 +
Some of the first crypto apps we build were in React, and it's possible we might be able to resurrect some of them if we tried. However the unfortunate reality is that web dev frameworks accelerate at an alarming rate, and that goes for blockchain related libraries as well (shudders at the memory of viem v1 -> v2 and ethers v5 -> v6). It doesn't have to be like that though.
10 +
11 +
Web components are independant pieces of Javascript that can be imported to plain HTML but also frameworks as well. They're atomic, existing on their own and able to out-last any framework as long as we keep using Javscript (unfortunately I think that is the case). Some notable existing web component libraries include [Material Web](https://github.com/material-components/material-web) and [Web Awesome](https://github.com/shoelace-style/webawesome).
12 +
13 +
The goal of Norns is to provide the Ethereum ecosystem a set of simple yet powerful web components for building decentralized applications. The advantage we have today is that we've experienced good DX from modern frameworks, so we have the ability to build components that feel familiar to devs building UIs for smart contracts. We will start small but slowly grow the offering as we get a better feel for what devs need; check out the [Roadmap](#roadmap) for more information.
14 +
15 +
## Local Development Setup
16 +
17 +
1. Clone and install dependencies with [Bun](https://bun.sh)
18 +
19 +
```bash
20 +
git clone https://github.com/stevedylandev/norns
21 +
cd norns
22 +
bun install
23 +
```
24 +
25 +
2. Run the dev server
26 +
27 +
```bash
28 +
bun dev
29 +
```
30 +
31 +
This will run a simple server for `site/index.html` which imports components from `src/component/`
32 +
33 +
3. Build
34 +
35 +
After editing components and testing them in the dev server you can run the `build` command to generate the CLI from `src/index.ts` that will create a `dist` folder. This enables users to run something like `npx norns-ui@latest init` to setup a project and add components, similar to shadcn/ui.
36 +
37 +
## Roadmap
38 +
39 +
Still figuring this out, suggestions and examples welcome!
40 +
41 +
**CLI**
42 +
43 +
- [x] Implement `norns.json` initialization
44 +
- [x] Improve styles and UX of commands and help menus
45 +
- [ ] Include utility files like types in initialization and `norns.json`
46 +
47 +
**Components**
48 +
49 +
- [x] Connect Wallet
50 +
- [x] Contract Call
51 +
- [ ] TX Toasts?
52 +
- [ ] Contract State (similar to contract call but auto loads the state)
53 +
- [ ] Framework compatability
54 +
  - [x] React
55 +
  - [ ] Svelte
56 +
  - [ ] Vue
57 +
- [ ] General types through JSDoc?
58 +
- [ ] Add tailwindcss class/className prop
59 +
- [ ] Styles override if shadcn present?
60 +
61 +
## Contributing
62 +
63 +
Norns is still in early development but definitely open to contributions! Just open an issue to get the ball rolling :)
64 +
65 +
## Contact
66 +
67 +
Feel free to reach out to any of my [socials](https://stevedylan.dev/links) or [shoot me an email](mailto:contact@stevedylan.dev)
biome.json (added) +37 −0
1 +
{
2 +
	"$schema": "https://biomejs.dev/schemas/2.2.4/schema.json",
3 +
	"vcs": {
4 +
		"enabled": false,
5 +
		"clientKind": "git",
6 +
		"useIgnoreFile": false
7 +
	},
8 +
	"files": {
9 +
		"ignoreUnknown": false
10 +
	},
11 +
	"formatter": {
12 +
		"enabled": true,
13 +
		"indentStyle": "tab"
14 +
	},
15 +
	"linter": {
16 +
		"enabled": true,
17 +
		"rules": {
18 +
			"recommended": true,
19 +
			"complexity": {
20 +
				"useArrowFunction": "off"
21 +
			}
22 +
		}
23 +
	},
24 +
	"javascript": {
25 +
		"formatter": {
26 +
			"quoteStyle": "double"
27 +
		}
28 +
	},
29 +
	"assist": {
30 +
		"enabled": true,
31 +
		"actions": {
32 +
			"source": {
33 +
				"organizeImports": "on"
34 +
			}
35 +
		}
36 +
	}
37 +
}
bun.lock (added) +40 −0
1 +
{
2 +
  "lockfileVersion": 1,
3 +
  "workspaces": {
4 +
    "": {
5 +
      "name": "norns-ui",
6 +
      "dependencies": {
7 +
        "@noble/hashes": "^2.0.0",
8 +
      },
9 +
      "devDependencies": {
10 +
        "@types/bun": "latest",
11 +
        "bun-plugin-tailwind": "^0.0.15",
12 +
        "tailwindcss": "^4.1.13",
13 +
      },
14 +
      "peerDependencies": {
15 +
        "typescript": "^5",
16 +
      },
17 +
    },
18 +
  },
19 +
  "packages": {
20 +
    "@noble/hashes": ["@noble/hashes@2.0.1", "", {}, "sha512-XlOlEbQcE9fmuXxrVTXCTlG2nlRXa9Rj3rr5Ue/+tX+nmkgbX720YHh0VR3hBF9xDvwnb8D2shVGOwNx+ulArw=="],
21 +
22 +
    "@types/bun": ["@types/bun@1.2.22", "", { "dependencies": { "bun-types": "1.2.22" } }, "sha512-5A/KrKos2ZcN0c6ljRSOa1fYIyCKhZfIVYeuyb4snnvomnpFqC0tTsEkdqNxbAgExV384OETQ//WAjl3XbYqQA=="],
23 +
24 +
    "@types/node": ["@types/node@24.5.2", "", { "dependencies": { "undici-types": "~7.12.0" } }, "sha512-FYxk1I7wPv3K2XBaoyH2cTnocQEu8AOZ60hPbsyukMPLv5/5qr7V1i8PLHdl6Zf87I+xZXFvPCXYjiTFq+YSDQ=="],
25 +
26 +
    "@types/react": ["@types/react@19.1.14", "", { "dependencies": { "csstype": "^3.0.2" } }, "sha512-ukd93VGzaNPMAUPy0gRDSC57UuQbnH9Kussp7HBjM06YFi9uZTFhOvMSO2OKqXm1rSgzOE+pVx1k1PYHGwlc8Q=="],
27 +
28 +
    "bun-plugin-tailwind": ["bun-plugin-tailwind@0.0.15", "", { "peerDependencies": { "typescript": "^5.0.0" } }, "sha512-qtAXMNGG4R0UGGI8zWrqm2B7BdXqx48vunJXBPzfDOHPA5WkRUZdTSbE7TFwO4jLhYqSE23YMWsM9NhE6ovobw=="],
29 +
30 +
    "bun-types": ["bun-types@1.2.22", "", { "dependencies": { "@types/node": "*" }, "peerDependencies": { "@types/react": "^19" } }, "sha512-hwaAu8tct/Zn6Zft4U9BsZcXkYomzpHJX28ofvx7k0Zz2HNz54n1n+tDgxoWFGB4PcFvJXJQloPhaV2eP3Q6EA=="],
31 +
32 +
    "csstype": ["csstype@3.1.3", "", {}, "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw=="],
33 +
34 +
    "tailwindcss": ["tailwindcss@4.1.13", "", {}, "sha512-i+zidfmTqtwquj4hMEwdjshYYgMbOrPzb9a0M3ZgNa0JMoZeFC6bxZvO8yr8ozS6ix2SDz0+mvryPeBs2TFE+w=="],
35 +
36 +
    "typescript": ["typescript@5.9.2", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A=="],
37 +
38 +
    "undici-types": ["undici-types@7.12.0", "", {}, "sha512-goOacqME2GYyOZZfb5Lgtu+1IDmAlAEu5xnD3+xTzS10hT0vzpf0SPjkXwAw9Jm+4n/mQGDP3LO8CPbYROeBfQ=="],
39 +
  }
40 +
}
bunfig.toml (added) +2 −0
1 +
[serve.static]
2 +
plugins = ["bun-plugin-tailwind"]
orbiter.json (added) +6 −0
1 +
{
2 +
	"siteId": "e4400933-efdd-4788-80d9-6a28872c3dc7",
3 +
	"domain": "norns",
4 +
	"buildCommand": "bun run build:site",
5 +
	"buildDir": "site-dist"
6 +
}
package.json (added) +18 −0
1 +
{
2 +
	"name": "blogfeeds",
3 +
	"version": "0.0.1",
4 +
	"description": "Webstie to promote blogfeeds",
5 +
	"type": "module",
6 +
	"scripts": {
7 +
		"build": "bun scripts/build-site",
8 +
		"dev": "bun site/index.html --console"
9 +
	},
10 +
	"devDependencies": {
11 +
		"@types/bun": "latest",
12 +
		"bun-plugin-tailwind": "^0.0.15",
13 +
		"tailwindcss": "^4.1.13"
14 +
	},
15 +
	"peerDependencies": {
16 +
		"typescript": "^5"
17 +
	}
18 +
}
scripts/build-site.ts (added) +18 −0
1 +
import { $ } from "bun";
2 +
3 +
// Clean up dist
4 +
await $`rm -rf site-dist`;
5 +
// Create new dist
6 +
await $`cp -r site site-dist`;
7 +
// Compile tailwindcss
8 +
await $`bunx @tailwindcss/cli -i ./site/input.css -o ./site-dist/output.css `;
9 +
// Read index file
10 +
const htmlContent = await Bun.file("site-dist/index.html").text();
11 +
// Update script tags and css link
12 +
const updatedHtml = htmlContent
13 +
	.replace(
14 +
		`<link rel="stylesheet" href="tailwindcss" />`,
15 +
		`<link rel="stylesheet" href="output.css" />`,
16 +
	);
17 +
// Write file
18 +
await Bun.write("site-dist/index.html", updatedHtml);
site/android-chrome-192x192.png (added) +0 −0

Binary file — no preview.

site/android-chrome-512x512.png (added) +0 −0

Binary file — no preview.

site/apple-touch-icon.png (added) +0 −0

Binary file — no preview.

site/favicon-16x16.png (added) +0 −0

Binary file — no preview.

site/favicon-32x32.png (added) +0 −0

Binary file — no preview.

site/favicon.ico (added) +0 −0

Binary file — no preview.

site/github.svg (added) +3 −0
1 +
<svg width="16" height="16" viewBox="0 0 24 24" fill="white" xmlns="http://www.w3.org/2000/svg">
2 +
  <path d="M12 0c-6.626 0-12 5.373-12 12 0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23.957-.266 1.983-.399 3.003-.404 1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576 4.765-1.589 8.199-6.086 8.199-11.386 0-6.627-5.373-12-12-12z"/>
3 +
</svg>
site/index.html (added) +131 −0
1 +
<!DOCTYPE html>
2 +
<html lang="en">
3 +
<head>
4 +
  <meta charset="UTF-8">
5 +
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6 +
    <title>Blog Feeds</title>
7 +
    <link rel="stylesheet" href="tailwindcss" />
8 +
    <meta name="description" content="">
9 +
10 +
    <!-- Facebook Meta Tags -->
11 +
    <meta property="og:url" content="">
12 +
    <meta property="og:type" content="website">
13 +
    <meta property="og:title" content="Norns">
14 +
    <meta property="og:description" content="">
15 +
    <meta property="og:image" content="/og.png">
16 +
17 +
    <!-- Twitter Meta Tags -->
18 +
    <meta name="twitter:card" content="summary_large_image">
19 +
    <meta property="twitter:domain" content="">
20 +
    <meta property="twitter:url" content="">
21 +
    <meta name="twitter:title" content="">
22 +
    <meta name="twitter:description" content="">
23 +
    <meta name="twitter:image" content="/og.png">
24 +
</head>
25 +
<body class="overflow-x-auto">
26 +
  <div class="flex snap-x snap-mandatory overflow-x-scroll">
27 +
    <section class="min-h-screen w-screen flex-shrink-0 flex flex-col gap-12 justify-center items-center px-8 snap-center">
28 +
      <div class="max-w-4xl space-y-4">
29 +
        <p>Do you kinda hate social media?</p>
30 +
31 +
        <p>Tired of doom scrolling through addicting feeds?</p>
32 +
33 +
        <p>Miss the days when the web was just about connecting with people and their thoughts or ideas?</p>
34 +
35 +
        <p>We believe there's an answer to that problem, and it's called</p>
36 +
        <h1 class="text-7xl font-bold mt-24">Blog Feeds</h1>
37 +
      </div>
38 +
    </section>
39 +
40 +
    <section class="min-h-screen w-screen flex-shrink-0 flex flex-col justify-center items-center px-8 snap-center">
41 +
      <div class="max-w-xl space-y-4">
42 +
        <p>No this isn't another platform.</p>
43 +
          <p>
44 +
            You don't sign up here.
45 +
          </p>
46 +
        <p>You just write what's on your mind, respond to an idea, post a recipe, or share a photo. It's blogs, but perhaps not in the way you would think of blogs.</p>
47 +
48 +
        <p>It just takes three things to participate:</p>
49 +
        <ol class="list-disc pl-4 text-2xl font-bold">
50 +
          <li>Blog</li>
51 +
          <li>RSS</li>
52 +
          <li>Feeds</li>
53 +
        </ol>
54 +
      </div>
55 +
    </section>
56 +
57 +
    <section class="min-h-screen w-screen flex-shrink-0 flex flex-col justify-center items-center px-8 snap-center">
58 +
      <div class="max-w-xl space-y-4">
59 +
        <h2 class="text-4xl font-bold">Blog</h2>
60 +
61 +
        <p>Let me reassure you, this is actually simpler than what you're probably thinking. This doesn't have to be some well polished highly viewed monetization machine. It's just a simple website where you can casually talk about whatever you want to talk about! It can be long, short, a list of small things, or just a quote. It should be how you talk with other people in your own life, or how you communicate with the outside world. It should be you on a page. Here's a few places you can make a blog that are RSS enabled:</p>
62 +
63 +
        <p><strong>Hosted Services</strong></p>
64 +
65 +
        <p>These are great if you are not quite a technical person and need everything to be simple and easy to use.</p>
66 +
        <ul class="list-disc pl-4 text-md font-semibold">
67 +
          <li>Bear Blog ⭐️</li>
68 +
          <li>Substack</li>
69 +
          <li>Ghost</li>
70 +
          <li>Wordpress</li>
71 +
          <li>Squarespace</li>
72 +
        </ul>
73 +
74 +
        <p><strong>Self Hosted Frameworks</strong></p>
75 +
76 +
        <p>For the devs 🫡 Some of my favorite frameworks and tools for making a blog!</p>
77 +
        <ul>
78 +
          <li>Astro</li>
79 +
          <li>Hugo</li>
80 +
          <li>Zola</li>
81 +
          <li>11ty</li>
82 +
          <li>Jekyll</li>
83 +
        </ul>
84 +
      </div>
85 +
    </section>
86 +
87 +
    <section class="min-h-screen w-screen flex-shrink-0 flex flex-col justify-center items-center px-8 snap-center">
88 +
      <div class="max-w-xl space-y-4">
89 +
        <h2 class="text-4xl font-bold">RSS</h2>
90 +
91 +
        <p>Also known as "really simple syndication", RSS has been around for decades. In short, it's simply a list of data that can be updated and notify people when something new has been posted. This is great for blogs since you don't have to always check all the people you want to follow. When you make your blog, you want to make sure it's RSS enabled (resources are further down). You also will want to get an RSS reader, as this will allow you to create a list of people to follow and let you read posts as they are published. These can vary from hosted web platforms where you might need to pay at some point to just free apps you can download. Would highly recommend trying a few and seeing which works best!</p>
92 +
        <ul>
93 +
          <li>Feedly</li>
94 +
          <li>Inoreader</li>
95 +
          <li>NetNewsWire</li>
96 +
          <li>Feeeeed</li>
97 +
          <li><a href="https://apps.apple.com/app/id6475002485">https://apps.apple.com/app/id6475002485</a></li>
98 +
        </ul>
99 +
      </div>
100 +
    </section>
101 +
102 +
    <section class="min-h-screen w-screen flex-shrink-0 flex flex-col justify-center items-center px-8 snap-center">
103 +
      <div class="max-w-xl space-y-4">
104 +
        <h2 class="text-4xl font-bold">Feeds</h2>
105 +
106 +
        <p>This takes us to our final point: Feeds. You can probably get away with just the first two items and then sharing it with people you already know, but what about meeting or talking to people you don't know? That's where Feeds come in. The idea is to create another page on your blog that has all the RSS feeds you're subscribed to. By keeping this public and always up to date, someone can visit your page, find someone new and follow them. Perhaps that person also has a feeds page, and the cycle continues until there is a natural and organic network of people all sharing with each other. So if you have a blog, consider making a feeds page and sharing it! If your RSS reader supports OPML file exports and imports, perhaps you can share that file as well to make it easier to share your feeds.</p>
107 +
      </div>
108 +
    </section>
109 +
110 +
    <section class="min-h-screen w-screen flex-shrink-0 flex flex-col justify-center items-center px-8 snap-center">
111 +
      <div class="max-w-xl space-y-4">
112 +
        <p>The best part about blog feeds? It's just an idea. There's no central authority. There's no platform. No massive tech giant trying to take your data. It's just you and the people you care about.</p>
113 +
      </div>
114 +
    </section>
115 +
116 +
    <section class="min-h-screen w-screen flex-shrink-0 flex flex-col justify-center items-center px-8 snap-center">
117 +
      <div class="max-w-xl space-y-4">
118 +
        <h2 class="text-4xl font-bold">FAQ</h2>
119 +
120 +
        <ul>
121 +
          <li>Where do I sign up?</li>
122 +
          <li>How much does Blog Feeds cost?</li>
123 +
          <li>Does this replace social media?</li>
124 +
          <li>What about monetization?</li>
125 +
          <li>What about comments or dialogue?</li>
126 +
        </ul>
127 +
      </div>
128 +
    </section>
129 +
  </div>
130 +
</body>
131 +
</html>
site/input.css (added) +1 −0
1 +
@import "tailwindcss";
site/logo.svg (added) +4 −0
1 +
<svg width="398" height="398" viewBox="0 0 398 398" fill="none" xmlns="http://www.w3.org/2000/svg">
2 +
<path fill-rule="evenodd" clip-rule="evenodd" d="M131.463 245.605L82.6792 196.821C82.6792 196.821 82.0684 196.19 81.5709 195.626C80.7603 194.709 79.9873 193.763 79.25 192.785C79.25 192.785 78.5216 191.817 78.0196 191.106C76.9246 189.543 75.9119 187.926 74.9812 186.26C74.9812 186.26 74.6237 185.605 74.3505 185.085C74.3505 185.085 74.0751 184.561 73.8374 184.084C73.7242 183.855 73.6131 183.626 73.5021 183.397C73.3355 183.046 73.1711 182.695 73.0134 182.34C73.0134 182.34 72.8291 181.929 72.6914 181.607C72.3871 180.899 72.1006 180.184 71.8275 179.464C71.8275 179.464 71.592 178.829 71.4055 178.285C70.6881 176.197 70.1217 174.06 69.7353 171.888C69.7353 171.888 69.6131 171.202 69.5221 170.6C69.3488 169.414 69.2267 168.219 69.1667 167.033C69.1667 167.033 69.1001 165.583 69.1156 164.495C69.1156 164.495 69.1245 163.982 69.1423 163.502C69.1423 163.502 69.1667 163.04 69.1823 162.738C69.1867 162.647 69.1934 162.56 69.1978 162.469C69.2733 161.467 69.3755 160.47 69.5243 159.482L69.5354 159.404C69.5976 158.998 69.6664 158.589 69.7442 158.183C69.7442 158.183 69.8974 157.363 70.0751 156.603C70.0751 156.603 70.1728 156.193 70.2483 155.891C70.3305 155.571 70.4149 155.253 70.5038 154.938L70.5282 154.86C70.6303 154.505 70.737 154.147 70.848 153.792C70.848 153.792 70.9613 153.436 71.0523 153.161C71.2145 152.683 71.3833 152.21 71.5609 151.742C71.5609 151.742 71.9318 150.784 72.2117 150.138L72.3649 149.781C72.4826 149.512 72.6492 149.159 72.6492 149.159C72.7247 148.992 72.8113 148.808 72.8113 148.808C72.9335 148.555 72.969 148.481 73.0357 148.344C73.24 147.93 73.4488 147.515 73.6709 147.106L73.8552 146.756C73.9307 146.622 74.0018 146.487 74.0018 146.487C74.506 145.576 75.0412 144.681 75.6053 143.811L75.8296 143.469C75.9274 143.322 76.014 143.189 76.014 143.189C76.336 142.711 76.6603 142.238 77.0001 141.778L77.1334 141.594C77.4554 141.156 77.7841 140.719 78.1195 140.29L78.5415 139.757C79.632 138.414 80.7847 137.101 81.9973 135.855L82.1661 135.677C82.1661 135.677 82.5926 135.24 83.0168 134.822L83.19 134.653C83.19 134.653 83.883 133.98 84.4826 133.427C85.3577 132.623 86.2527 131.844 87.1789 131.102L87.7119 130.676C88.6581 129.943 89.6153 129.234 90.6125 128.564C90.6125 128.564 91.1322 128.213 91.5942 127.922C92.4049 127.402 93.2333 126.909 94.0817 126.445L94.4326 126.256C94.9923 125.956 95.5587 125.665 96.1339 125.39L96.4848 125.223C96.6514 125.148 96.8358 125.061 96.8358 125.061C97.2178 124.888 97.2378 124.879 97.3799 124.817L97.4576 124.781C97.5554 124.737 97.5554 124.737 97.6509 124.699C97.6509 124.699 98.526 124.328 99.0656 124.124L99.7741 123.855C100.216 123.693 100.665 123.54 101.113 123.398L101.189 123.371C101.52 123.269 101.846 123.167 102.177 123.071L102.533 122.969C102.89 122.871 103.246 122.776 103.605 122.689C103.605 122.689 104.012 122.587 104.314 122.52C105.204 122.32 106.104 122.145 107.001 122.012C107.001 122.012 107.585 121.925 107.954 121.881C108.407 121.821 108.86 121.774 109.318 121.734C109.318 121.734 110.111 121.672 110.824 121.636L111.332 121.616C111.55 121.607 111.581 121.607 111.581 121.607C112.409 121.587 113.236 121.592 114.064 121.627H114.131C115.892 121.705 117.626 121.892 119.408 122.214C121.988 122.682 124.527 123.393 126.986 124.31L127.112 124.357C131.852 126.163 136.361 128.657 140.36 131.733L131.084 141.01C129.205 139.706 127.21 138.578 125.145 137.605C122.955 136.568 120.672 135.753 118.28 135.218C115.124 134.511 111.868 134.358 108.656 134.878C108.006 134.984 107.355 135.118 106.717 135.28C106.717 135.28 105.674 135.551 105.105 135.737C104.845 135.819 104.585 135.906 104.328 136.002L104.261 136.026C103.761 136.208 103.264 136.401 102.775 136.612C102.775 136.612 102.455 136.75 102.242 136.848C102.135 136.894 102.029 136.945 101.927 136.994C100.539 137.649 99.2038 138.418 97.9267 139.273C97.6269 139.473 97.2138 139.766 97.2138 139.766C93.8134 142.178 90.7906 145.141 88.3429 148.27C88.1075 148.574 87.8698 148.885 87.6411 149.196C87.6411 149.196 87.3501 149.598 87.1835 149.834C86.0997 151.382 85.1469 153.021 84.3629 154.729C83.9298 155.675 83.5545 156.643 83.2524 157.589C83.2369 157.636 83.2369 157.636 83.2213 157.687C82.3552 160.426 81.9731 163.275 82.1109 166.176C82.4462 173.219 85.5156 179.593 89.5734 184.932C90.2907 185.878 91.0348 186.815 91.8632 187.659L140.631 236.427L131.458 245.6L131.463 245.605ZM227.415 341.551L152.387 266.528L161.559 257.356L236.582 332.384L237.166 333.051C237.329 333.299 237.509 333.535 237.651 333.792C238.521 335.338 238.719 337.239 238.179 338.934C237.466 341.184 235.441 342.958 233.1 343.363C231.354 343.662 229.495 343.209 228.08 342.137C227.845 341.959 227.636 341.75 227.414 341.553L227.415 341.551ZM236.435 245.605L152.388 161.559L161.561 152.386L245.607 236.432L236.435 245.605ZM266.926 256.961C270.082 259.184 273.558 260.952 277.219 262.096C278.796 262.589 280.395 262.962 282.023 263.184C283.184 263.342 284.37 263.424 285.541 263.417C287.52 263.426 289.547 263.162 291.502 262.649C291.502 262.649 292.026 262.516 292.483 262.373C292.961 262.231 293.434 262.074 293.898 261.9L293.969 261.874C296.281 261.014 298.458 259.824 300.523 258.398L300.583 258.358C300.934 258.114 301.281 257.86 301.623 257.605L301.685 257.558C302.198 257.167 302.706 256.763 303.197 256.352L303.259 256.301C304.608 255.166 305.876 253.956 307.066 252.699C307.566 252.175 308.048 251.639 308.516 251.091C308.516 251.091 308.927 250.607 309.172 250.307C310.26 248.972 311.248 247.573 312.128 246.107C312.994 244.657 313.74 243.144 314.318 241.587C314.318 241.587 314.466 241.194 314.578 240.874C314.578 240.874 314.846 240.07 315.011 239.471C315.011 239.471 315.25 238.585 315.377 237.985C315.759 236.188 315.928 234.351 315.897 232.499C315.846 229.441 315.191 226.482 314.313 223.917C313.056 220.257 311.173 216.832 308.887 213.687C308.048 212.532 307.173 211.426 306.16 210.362L257.356 161.559L266.529 152.386L315.313 201.17C315.313 201.17 315.359 201.221 315.411 201.272L315.522 201.385C318.113 204.113 320.31 207.142 322.256 210.42C324.19 213.683 325.787 217.143 326.938 220.777C327.217 221.659 327.466 222.547 327.686 223.44L327.706 223.511C328.104 225.15 328.412 226.814 328.608 228.488C328.608 228.488 328.714 229.419 328.765 230.085C328.777 230.243 328.785 230.4 328.797 230.558C328.821 230.909 328.836 231.256 328.848 231.607C328.848 231.607 328.856 231.769 328.859 231.913C328.863 232.011 328.859 232.011 328.863 232.106C328.872 232.517 328.872 232.579 328.872 232.757C328.876 233.534 328.861 234.309 328.812 235.087L328.768 235.749C328.737 236.177 328.697 236.608 328.65 237.032L328.554 237.812C328.534 237.961 328.523 238.067 328.523 238.067C328.463 238.469 328.401 238.871 328.335 239.273C328.335 239.273 328.192 240.073 328.066 240.677L327.97 241.11C327.879 241.492 327.788 241.874 327.69 242.256L327.553 242.771C327.475 243.071 327.386 243.367 327.297 243.662C327.297 243.662 327.16 244.126 327.044 244.47L326.902 244.908C326.78 245.263 326.653 245.617 326.524 245.972C326.453 246.165 326.422 246.243 326.422 246.243C325.934 247.524 325.383 248.793 324.774 249.994L324.734 250.072C324.521 250.494 324.301 250.911 324.077 251.324L323.777 251.864C323.588 252.195 323.32 252.653 323.32 252.653C322.855 253.441 322.367 254.214 321.849 254.969L321.487 255.498C320.048 257.55 318.493 259.467 316.652 261.436C315.833 262.311 314.982 263.167 314.107 263.991C314.107 263.991 313.765 264.313 313.501 264.561C312.763 265.234 312.008 265.896 311.242 266.527C311.242 266.527 310.103 267.453 309.139 268.175C308.817 268.41 308.492 268.648 308.166 268.877L307.982 269.008C307.782 269.145 307.548 269.308 307.548 269.308C306.54 269.985 305.503 270.642 304.444 271.242C304.337 271.302 304.392 271.269 304.175 271.391C303.706 271.655 303.229 271.91 302.749 272.155L302.398 272.332C301.396 272.826 300.384 273.285 299.355 273.696L298.567 274C298.24 274.123 297.909 274.24 297.581 274.356L297.225 274.474C296.639 274.667 296.046 274.851 295.453 275.018L294.938 275.16C294.8 275.195 294.658 275.231 294.658 275.231C294.28 275.326 293.898 275.42 293.514 275.502C293.514 275.502 292.912 275.635 292.384 275.737C292.384 275.737 291.651 275.871 291.08 275.962C290.622 276.033 290.163 276.093 289.705 276.146L289.192 276.201C289.192 276.201 288.346 276.279 287.746 276.319C287.104 276.359 286.458 276.379 285.816 276.386H285.245C284.67 276.381 284.095 276.37 283.52 276.339L283.118 276.315C282.325 276.264 281.534 276.193 280.746 276.095C280.746 276.095 279.926 275.993 279.275 275.886C279.118 275.862 278.96 275.835 278.802 275.808C272.528 274.713 266.571 272.135 261.401 268.841C260.113 268.022 258.847 267.162 257.634 266.245L266.922 256.961L266.926 256.961ZM245.607 131.46L236.435 140.631L161.406 65.6077C160.893 65.0169 160.728 64.8859 160.342 64.2018C159.325 62.3939 159.252 60.1041 160.138 58.2363C161.399 55.58 164.615 54.0076 167.531 54.7205C168.395 54.9293 169.21 55.3157 169.915 55.851C170.15 56.0287 170.359 56.2419 170.581 56.4351L245.609 131.464L245.607 131.46Z" fill="white"/>
3 +
<path fill-rule="evenodd" clip-rule="evenodd" d="M192.829 318.719C192.716 318.806 192.585 318.904 192.454 318.999L192.02 319.321C191.705 319.55 191.272 319.856 191.272 319.856C190.173 320.625 189.038 321.373 187.876 322.075C187.876 322.075 186.47 322.906 185.524 323.414C185.28 323.545 184.984 323.699 184.984 323.699C184.78 323.805 184.547 323.923 184.547 323.923C183.976 324.214 183.403 324.489 182.821 324.763L182.71 324.814C181.142 325.531 179.57 326.157 177.899 326.717C177.899 326.717 177.333 326.906 177 327.008C174.848 327.67 172.669 328.174 170.501 328.483C169.864 328.574 169.213 328.652 168.567 328.711L168.5 328.716C168.016 328.76 167.532 328.798 167.043 328.823L166.976 328.827C166.13 328.871 165.282 328.887 164.436 328.874C164.436 328.874 163.896 328.863 163.509 328.847C163.509 328.847 162.324 328.791 161.475 328.709C161.475 328.709 159.994 328.556 158.89 328.367C158.89 328.367 158.432 328.292 158.101 328.23C152.436 327.15 147.127 324.758 142.312 321.369C138.688 318.815 135.409 315.792 132.495 312.463C130.439 310.107 128.577 307.584 127.009 304.894L126.958 304.808C125.204 301.78 123.818 298.558 122.907 295.198C122.907 295.198 122.774 294.713 122.674 294.316C121.946 291.344 121.575 288.311 121.606 285.003C121.61 284.703 121.617 284.404 121.63 284.104C121.63 284.104 121.655 283.56 121.677 283.122L121.688 282.96C121.712 282.613 121.739 282.267 121.77 281.921L121.781 281.758C121.812 281.487 121.848 281.136 121.848 281.136C121.892 280.797 121.926 280.459 121.979 280.119C121.979 280.119 122.101 279.26 122.212 278.658C122.248 278.458 122.29 278.22 122.29 278.22C122.352 277.905 122.439 277.472 122.439 277.472C122.49 277.232 122.561 276.901 122.561 276.901C122.601 276.723 122.647 276.519 122.647 276.519C122.79 275.919 122.936 275.324 123.105 274.733C123.105 274.733 123.216 274.331 123.303 274.045C123.347 273.898 123.389 273.754 123.436 273.607C124.027 271.68 124.748 269.796 125.557 268.019C125.979 267.089 126.428 266.172 126.892 265.292L126.947 265.185C127.598 263.959 128.287 262.762 129.033 261.587L129.435 260.961C129.588 260.728 129.781 260.437 129.781 260.437C130.372 259.557 130.983 258.696 131.622 257.847L131.674 257.772C132.202 257.074 132.746 256.393 133.308 255.722L133.47 255.529C133.47 255.529 133.806 255.135 134.126 254.776L134.257 254.629C134.312 254.567 134.312 254.567 134.37 254.502C134.639 254.212 135.012 253.814 135.012 253.814L183.953 204.873L193.126 214.043L144.342 262.827C144.44 262.729 143.9 263.3 143.582 263.667C142.499 264.919 141.497 266.247 140.575 267.635C139.731 268.897 138.947 270.212 138.245 271.571C137.954 272.137 137.675 272.706 137.415 273.281C137.415 273.281 137.175 273.814 136.982 274.267C136.851 274.574 136.728 274.883 136.611 275.189C136.611 275.189 136.366 275.824 136.198 276.313C135.944 277.041 135.72 277.77 135.52 278.512C135.509 278.558 135.496 278.607 135.485 278.649C135.196 279.749 134.976 280.857 134.818 281.983C134.283 285.763 134.65 289.617 135.847 293.195C135.873 293.272 135.902 293.352 135.929 293.435C137.781 298.825 141.457 303.522 145.619 307.376C148.784 310.303 152.369 312.806 156.471 314.348C158.099 314.959 159.793 315.392 161.488 315.649C162.852 315.854 164.262 315.938 165.606 315.902C165.606 315.902 166.914 315.847 167.571 315.78C167.927 315.745 168.277 315.703 168.628 315.649C168.628 315.649 168.964 315.603 169.177 315.567C170.216 315.394 171.238 315.17 172.226 314.894C172.817 314.732 173.408 314.548 173.988 314.35C173.988 314.35 174.63 314.13 175.118 313.944C175.947 313.624 176.757 313.282 177.557 312.906C177.557 312.906 178.412 312.504 179.069 312.158C179.069 312.158 179.531 311.909 179.88 311.716C181.137 311.023 182.354 310.261 183.54 309.435L192.824 318.723L192.829 318.719ZM88.1549 214.04L65.6099 236.585C65.0191 237.1 64.8925 237.262 64.204 237.653C62.1473 238.808 59.4555 238.726 57.4698 237.42C55.984 236.447 54.9357 234.846 54.6336 233.098C54.3338 231.352 54.7868 229.493 55.8596 228.078C56.0372 227.843 56.246 227.634 56.4436 227.412L78.9847 204.871L88.1574 214.041L88.1549 214.04ZM214.048 298.091L204.875 288.919L288.927 204.872L298.098 214.043L214.051 298.095L214.048 298.091ZM109.078 193.122L99.9055 183.949L183.957 99.9028L193.13 109.076L109.078 193.122ZM214.463 88.5558L205.179 79.2722L205.424 79.0878C205.657 78.9146 205.888 78.7414 206.126 78.5726C206.126 78.5726 206.792 78.084 207.371 77.6908L207.793 77.4065C208.082 77.2133 208.466 76.9579 208.466 76.9579C208.924 76.6625 209.384 76.3716 209.85 76.0873L210.323 75.7986C210.323 75.7986 211.045 75.3722 211.54 75.0923C212.808 74.3838 214.101 73.7242 215.425 73.1178C216.111 72.8069 216.804 72.5071 217.506 72.2272L217.624 72.1806C218.49 71.8341 219.365 71.5143 220.249 71.2233C220.249 71.2233 221.288 70.8835 222.039 70.6748L222.736 70.4815C223.143 70.3749 223.547 70.2728 223.958 70.1773C223.958 70.1773 224.58 70.0307 225.011 69.944C225.381 69.8663 225.748 69.7952 226.119 69.7308C226.119 69.7308 226.563 69.6531 226.938 69.5931C226.938 69.5931 227.451 69.511 227.889 69.451C228.215 69.4066 228.662 69.3555 228.662 69.3555C229.532 69.2644 230.408 69.1867 231.283 69.1467L231.696 69.1312C232.078 69.1201 232.597 69.1112 232.597 69.1112C233.346 69.1067 234.094 69.1201 234.841 69.1556C234.841 69.1556 235.991 69.2156 237.055 69.3333C237.37 69.3688 237.686 69.4088 238.001 69.451C238.001 69.451 238.443 69.511 238.856 69.5776C238.856 69.5776 239.6 69.6953 240.251 69.8308C240.251 69.8308 240.662 69.9085 240.964 69.9796C242.985 70.4238 244.97 71.0368 246.899 71.8074C249.697 72.9313 252.389 74.3727 254.903 76.0717C254.903 76.0717 255.258 76.3116 255.523 76.4981C258.21 78.3704 260.728 80.5381 263.019 82.8502C267.27 87.1412 270.883 92.0054 273.311 97.6553C273.56 98.2393 273.795 98.8301 274.019 99.4254L274.09 99.6142C274.253 100.056 274.406 100.494 274.552 100.938C274.552 100.938 274.894 102.002 275.112 102.806C275.636 104.74 276.014 106.715 276.216 108.72L276.22 108.791C276.267 109.249 276.307 109.706 276.334 110.161L276.369 110.823C276.416 111.872 276.425 112.924 276.38 113.973C276.38 113.973 276.36 114.45 276.34 114.797C276.32 115.108 276.296 115.423 276.274 115.734C276.274 115.734 276.227 116.274 276.178 116.7C276.134 117.113 276.083 117.528 276.02 117.942C276.02 117.942 275.976 118.268 275.929 118.561L275.921 118.617C275.825 119.203 275.723 119.792 275.601 120.373L275.459 121.031C275.387 121.346 275.316 121.662 275.239 121.973C275.239 121.973 275.034 122.803 274.826 123.536C274.728 123.878 274.626 124.225 274.519 124.569C274.519 124.569 274.022 126.101 273.644 127.103C273.644 127.103 273.309 127.994 272.936 128.875L272.727 129.364C272.183 130.594 271.616 131.776 270.946 133.029L270.89 133.131C270.464 133.919 270.024 134.694 269.557 135.463L269.502 135.554C269.238 135.991 268.967 136.424 268.691 136.851L268.458 137.206C268.04 137.837 267.614 138.468 267.174 139.079L266.852 139.527C266.597 139.869 266.344 140.216 266.079 140.555C266.079 140.555 265.851 140.851 265.677 141.071C265.331 141.508 264.98 141.937 264.62 142.363L264.462 142.552L264.096 142.974C264.096 142.974 263.718 143.403 263.434 143.712L263.21 143.956C262.961 144.216 262.843 144.333 262.843 144.333L214.059 193.117L204.887 183.945L253.671 135.161C253.568 135.267 254.006 134.81 254.286 134.49C255.498 133.106 256.611 131.62 257.611 130.092C258.323 129.004 258.99 127.885 259.601 126.734L259.983 125.992C260.882 124.185 261.657 122.283 262.221 120.416C262.588 119.203 262.879 117.981 263.092 116.689C263.254 115.687 263.361 114.69 263.407 113.677C263.412 113.633 263.412 113.633 263.412 113.586C263.478 112.018 263.396 110.43 263.159 108.869C262.497 104.502 260.558 100.411 258.013 96.8933C254.053 91.423 248.918 86.7432 242.626 84.0715C238.844 82.4724 234.737 81.8016 230.599 82.1947C228.33 82.4079 226.1 82.9521 224.325 83.534C223.75 83.7228 223.181 83.9271 222.62 84.1492C222.62 84.1492 221.673 84.5201 220.814 84.9132C220.814 84.9132 220.345 85.1309 220.037 85.2797C218.893 85.8349 217.776 86.4413 216.692 87.1009C216.621 87.1475 216.545 87.192 216.474 87.2342C216.256 87.3674 215.97 87.5495 215.97 87.5495C215.679 87.7383 215.386 87.9249 215.099 88.1203C215.099 88.1203 214.808 88.318 214.469 88.549L214.463 88.5558ZM319.029 193.122L309.856 183.949L332.397 161.408C332.988 160.893 333.119 160.726 333.808 160.34C336.124 159.036 339.229 159.347 341.248 161.104C341.692 161.49 342.052 161.963 342.409 162.436C342.791 163.118 342.929 163.28 343.167 164.033C343.702 165.723 343.509 167.627 342.638 169.173C342.252 169.861 342.087 169.988 341.57 170.583L319.029 193.124L319.029 193.122Z" fill="#5F8787"/>
4 +
</svg>
site/og.png (added) +0 −0

Binary file — no preview.

site/site.webmanifest (added) +1 −0
1 +
{"name":"","short_name":"","icons":[{"src":"/android-chrome-192x192.png","sizes":"192x192","type":"image/png"},{"src":"/android-chrome-512x512.png","sizes":"512x512","type":"image/png"}],"theme_color":"#ffffff","background_color":"#ffffff","display":"standalone"}
tsconfig.json (added) +29 −0
1 +
{
2 +
	"compilerOptions": {
3 +
		// Environment setup & latest features
4 +
		"lib": ["ESNext", "DOM", "DOM.Iterable"],
5 +
		"target": "ESNext",
6 +
		"module": "Preserve",
7 +
		"moduleDetection": "force",
8 +
		"jsx": "react-jsx",
9 +
		"allowJs": true,
10 +
11 +
		// Bundler mode
12 +
		"moduleResolution": "bundler",
13 +
		"allowImportingTsExtensions": true,
14 +
		"verbatimModuleSyntax": true,
15 +
		"noEmit": true,
16 +
17 +
		// Best practices
18 +
		"strict": true,
19 +
		"skipLibCheck": true,
20 +
		"noFallthroughCasesInSwitch": true,
21 +
		"noUncheckedIndexedAccess": true,
22 +
		"noImplicitOverride": true,
23 +
24 +
		// Some stricter flags (disabled by default)
25 +
		"noUnusedLocals": false,
26 +
		"noUnusedParameters": false,
27 +
		"noPropertyAccessFromIndexSignature": false
28 +
	}
29 +
}