{{ data.profiles?.name }}
37 |{{ format(new Date(data.created_at), "MMMM d") }}
38 |{{ data.title }}
41 | 42 |48 | 49 |
├── .env.example
├── .gitignore
├── README.md
├── app.vue
├── app
└── router.options.ts
├── assets
└── main.css
├── components
├── Button.vue
├── Command.vue
├── Drawer.vue
├── Drawer
│ └── EditPost.vue
├── Footer.vue
├── Loader.vue
├── Logo.vue
├── Modal.vue
├── Modal
│ └── Login.vue
├── Post
│ └── Card.vue
├── TagsInput.vue
├── Tiptap.vue
├── Tiptap
│ ├── Bubble.vue
│ ├── CommandList.vue
│ ├── ModalIframe.vue
│ └── ModalImage.vue
├── TiptapHeading.vue
├── Toggle.vue
└── Upload.vue
├── composables
├── dashboard.ts
├── head.ts
├── subdomain.ts
└── url.ts
├── layouts
├── default.vue
└── user.vue
├── license.md
├── middleware
└── auth.ts
├── modules
└── og.ts
├── nuxt.config.ts
├── package.json
├── pages
├── dashboard.vue
├── dashboard
│ ├── domain.vue
│ ├── index.vue
│ ├── posts.vue
│ └── profile.vue
├── edit
│ └── [id].vue
├── index.vue
├── login.vue
├── posts.vue
└── user
│ ├── [siteId].vue
│ └── [siteId]
│ ├── [slug].vue
│ ├── home.vue
│ └── index.vue
├── plugins
└── umami.client.ts
├── public
├── banner.png
├── fonts
│ ├── arial.ttf
│ └── arial_bold.ttf
├── hero.png
├── logo.svg
└── og.png
├── server
├── api
│ ├── _supabase
│ │ └── session.post.ts
│ ├── add-domain.post.ts
│ ├── check-domain.post.ts
│ ├── delete-domain.post.ts
│ ├── request-delegation.ts
│ └── user-validation.post.ts
├── middleware
│ ├── login.ts
│ └── subdomain.ts
└── routes
│ └── og
│ └── [slug].ts
├── tsconfig.json
├── utils
├── functions.ts
├── tiptap
│ ├── code.ts
│ ├── commands.ts
│ ├── hardbreak.ts
│ ├── iframe.ts
│ ├── link.ts
│ ├── move.ts
│ ├── placeholder.ts
│ ├── suggestion.ts
│ └── upload.ts
└── types.ts
└── yarn.lock
/.env.example:
--------------------------------------------------------------------------------
1 | SUPABASE_URL=
3 |
4 |
9 | A keyboard-first blogging platform.
14 | View Demo
15 | ·
16 | Report Bug
17 | ·
18 | Request Feature
19 |
2 |
5 |
6 |
7 |
8 |
10 | Finally write your blog post only with keys 🎹
11 |
Tips:
6 |⌘ + K to search for commands
7 |{{ stripHtml(post.body).result.slice(0, 120) }}...
37 |Set the following record on your DNS provider to continue:
79 | 80 |Type
83 |CNAME
84 |Name
87 |{{ payload.subdomain.split(".")[0] }}
88 |Value
91 |cname.vercel-dns.com
92 |