{item.title}
131 | )} 132 | 133 | {item.description && ( 134 |135 | {item.description} 136 |
137 | )} 138 | 139 | {item.date && ( 140 |({item.date})
141 | )} 142 |{section.content}
147 | ) : section.type === 'links' ? ( 148 |├── .npmrc ├── .env.example ├── src ├── pages │ ├── 404.astro │ ├── @[username].astro │ └── index.astro ├── components │ ├── profile │ │ ├── index.ts │ │ ├── profile.tsx │ │ └── profile.module.css │ ├── container │ │ ├── index.ts │ │ ├── container.module.css │ │ └── container.tsx │ ├── section.astro │ ├── hero.astro │ ├── what.astro │ └── steps.astro ├── styles │ ├── variables │ │ ├── index.css │ │ ├── typography.css │ │ └── color.css │ ├── global.css │ ├── base │ │ └── base.css │ └── fonts.css ├── env.d.ts ├── helpers │ ├── array.ts │ ├── number.ts │ ├── string.ts │ ├── styles.ts │ ├── slug.ts │ ├── date.ts │ └── random.ts ├── database │ ├── drizzle.ts │ └── schema.ts ├── lib │ ├── source.ts │ └── profile.ts ├── layouts │ └── layout.astro └── validators │ └── profile.ts ├── .eslintignore ├── .prettierignore ├── .stylelintignore ├── public ├── og.png ├── robots.txt ├── fonts │ ├── geist-v1-latin-500.woff2 │ ├── geist-v16-latin-500.woff2 │ ├── lora-v36-latin-500.woff2 │ ├── geist-v1-latin-regular.woff2 │ ├── lora-v36-latin-regular.woff2 │ ├── geist-v16-latin-regular.woff2 │ ├── ibm-plex-mono-v19-latin-500.woff2 │ ├── ibm-plex-mono-v19-latin-italic.woff2 │ ├── ibm-plex-mono-v19-latin-regular.woff2 │ └── ibm-plex-mono-v19-latin-500italic.woff2 ├── favicon.svg └── schema.json ├── .czrc ├── .commitlintrc.json ├── .editorconfig ├── .husky ├── pre-commit └── commit-msg ├── docs ├── README.md ├── setup.md └── schema.md ├── postcss.config.cjs ├── .prettierrc.json ├── .vscode ├── extensions.json ├── launch.json └── settings.json ├── .lintstagedrc.json ├── migrations ├── meta │ ├── _journal.json │ └── 0000_snapshot.json └── 0000_dusty_chat.sql ├── tsconfig.json ├── .gitignore ├── drizzle.config.ts ├── astro.config.mjs ├── .stylelintrc.json ├── scripts └── build-schema.ts ├── .versionrc.json ├── template └── bio.json ├── LICENSE ├── README.md ├── .eslintrc.json └── package.json /.npmrc: -------------------------------------------------------------------------------- 1 | save-exact=true 2 | -------------------------------------------------------------------------------- /.env.example: -------------------------------------------------------------------------------- 1 | DATABASE_URL= 2 | -------------------------------------------------------------------------------- /src/pages/404.astro: -------------------------------------------------------------------------------- 1 |
Your open-source bio page.
5 |
7 | OPN is an open-source bio page that lives on your GitHub. Instead
8 | of creating yet another account, all you need is a public repo named
9 | .opn with a simple bio.json file inside. From there,
10 | your profile is generated automatically and stays fully in your control. (Example:
11 | opn.bio/@remvze)
12 |
Error: {error}
70 |83 | [{error.path}]: {error.message} 84 |
85 | ))} 86 |{profile.description}
106 | 107 |{item.title}
131 | )} 132 | 133 | {item.description && ( 134 |135 | {item.description} 136 |
137 | )} 138 | 139 | {item.date && ( 140 |({item.date})
141 | )} 142 |{section.content}
147 | ) : section.type === 'links' ? ( 148 |
13 | Create a public repository in your GitHub account called
14 | .opn
15 |
23 | Add a bio.json file inside your .opn repository.
24 | You can copy the base from here.
29 |
37 | Based on the schema, fill bio.json with your information.
42 |
50 | Your bio page will be generated automatically and available at opn.bio/@your-github-username.
53 |