|
1 | | -# OneLiteFeather Blog |
| 1 | +# OneLiteFeather Blog / Site |
2 | 2 |
|
3 | | -A multilingual blog platform built with Nuxt 3, featuring content in both German and English. |
| 3 | +Multilingual (de/en) Nuxt site with @nuxt/content, SEO/i18n, and feature-based components. |
4 | 4 |
|
5 | | -## Project Overview |
6 | | - |
7 | | -This project serves as the official blog for OneLiteFeather.net, providing articles and information in multiple languages. It's built with modern web technologies to ensure fast loading times, SEO optimization, and a great user experience. |
8 | | - |
9 | | -## Features |
10 | | - |
11 | | -- Multilingual content (German and English) |
12 | | -- Responsive design with Tailwind CSS |
13 | | -- SEO optimized with meta tags, sitemap, and robots.txt |
14 | | -- Content management using Nuxt Content |
15 | | -- Social media preview images |
16 | | -- Structured data for better search engine visibility |
17 | | - |
18 | | -## Roadmap |
19 | | - |
20 | | -This project is intended to become the normal/official site for OneLiteFeather.net. Future plans include: |
21 | | - |
22 | | -- Expanding content categories |
23 | | -- Enhancing user experience |
24 | | -- Improving performance metrics |
25 | | -- Adding more interactive elements |
26 | | -- Integrating with other OneLiteFeather services |
27 | | - |
28 | | -## Technologies Used |
29 | | - |
30 | | -- [Nuxt 3](https://nuxt.com/) - Vue.js framework |
31 | | -- [Nuxt Content](https://content.nuxtjs.org/) - Content management |
32 | | -- [Nuxt i18n](https://i18n.nuxtjs.org/) - Internationalization |
33 | | -- [Tailwind CSS](https://tailwindcss.com/) - Styling |
34 | | -- [Nuxt SEO](https://nuxtseo.com/) - SEO optimization |
| 5 | +## Stack |
| 6 | +- Nuxt 3 + TypeScript, Tailwind CSS |
| 7 | +- @nuxt/content for Markdown/data collections (blog, sponsors, timeline, etc.) |
| 8 | +- @nuxtjs/i18n, @nuxtjs/seo, @nuxtjs/sitemap, nuxt-schema-org |
| 9 | +- FontAwesome (brands/solid) + @nuxt/image (Cloudflare provider) |
35 | 10 |
|
36 | 11 | ## Project Structure |
37 | | - |
38 | | -- `content/` - Blog posts and other content (organized by language) |
39 | | -- `components/` - Vue components |
40 | | -- `layouts/` - Page layouts |
41 | | -- `pages/` - Application pages |
42 | | -- `public/` - Static assets |
43 | | -- `i18n/` - Internationalization configuration |
44 | | - |
45 | | -## Setup |
46 | | - |
47 | | -Make sure to install dependencies: |
48 | | - |
49 | | -```bash |
50 | | -# Using pnpm (recommended) |
51 | | -pnpm install |
52 | | - |
53 | | -# Using npm |
54 | | -npm install |
55 | | - |
56 | | -# Using yarn |
57 | | -yarn install |
58 | | - |
59 | | -# Using bun |
60 | | -bun install |
61 | | -``` |
62 | | - |
63 | | -## Development Server |
64 | | - |
65 | | -Start the development server on `http://localhost:3000`: |
66 | | - |
67 | | -```bash |
68 | | -# Using pnpm (recommended) |
69 | | -pnpm dev |
70 | | - |
71 | | -# Using npm |
72 | | -npm run dev |
73 | | - |
74 | | -# Using yarn |
75 | | -yarn dev |
76 | | - |
77 | | -# Using bun |
78 | | -bun run dev |
79 | | -``` |
80 | | - |
81 | | -## Production |
82 | | - |
83 | | -Build the application for production: |
84 | | - |
85 | | -```bash |
86 | | -# Using pnpm (recommended) |
87 | | -pnpm build |
88 | | - |
89 | | -# Using npm |
90 | | -npm run build |
91 | | - |
92 | | -# Using yarn |
93 | | -yarn build |
94 | | - |
95 | | -# Using bun |
96 | | -bun run build |
97 | | -``` |
98 | | - |
99 | | -Locally preview production build: |
100 | | - |
101 | | -```bash |
102 | | -# Using pnpm (recommended) |
103 | | -pnpm preview |
104 | | - |
105 | | -# Using npm |
106 | | -npm run preview |
107 | | - |
108 | | -# Using yarn |
109 | | -yarn preview |
110 | | - |
111 | | -# Using bun |
112 | | -bun run preview |
113 | | -``` |
114 | | - |
115 | | -Check out the [deployment documentation](https://nuxt.com/docs/getting-started/deployment) for more information. |
| 12 | +- `content/` — localized collections (`blog_{locale}`, `sponsors_{locale}`, etc.) |
| 13 | +- `components/features/` — navigation, footer, sponsoring, OpenCollective, home sections |
| 14 | +- `components/base/` — primitives (buttons, typography, icons) |
| 15 | +- `layouts/` — shared layout chrome |
| 16 | +- `pages/` — route-driven pages |
| 17 | +- `i18n/locales/` — locale message files |
| 18 | + |
| 19 | +## Scripts |
| 20 | +- Install: `pnpm install` |
| 21 | +- Dev: `pnpm dev` |
| 22 | +- Build: `pnpm build` |
| 23 | +- Preview: `pnpm preview` |
| 24 | +- Generate (SSG): `pnpm generate` |
| 25 | + |
| 26 | +## Content authoring |
| 27 | +- Blog posts live under `content/blog/{locale}/`. Frontmatter supports `title`, `description`, `slug`, `pubDate`, `canonical`, `alternates`, `sitemap`, etc. |
| 28 | +- Sponsors: `content/sponsors/{locale}/home.json` supports `name`, `url`, `description`, `badge`, plus optional `logo` (URL) or `icon` (`"fab cloudflare"` style). |
| 29 | +- Schema for all collections lives in `content.config.ts`. |
| 30 | + |
| 31 | +## SEO / i18n |
| 32 | +- `usePageSeo` + `useHomeSeo` provide canonical/hreflang and social meta. |
| 33 | +- Sitemap is auto-generated with i18n-aware content source and alternates. |
| 34 | +- Schema.org via `nuxt-schema-org`; site config from `nuxt.config.ts`. |
116 | 35 |
|
117 | 36 | ## Releases |
| 37 | +- Semantic-release on main with conventional commits. Run `pnpm release` (with push access) to publish tags/changelog. |
| 38 | +- Footer version is pulled from `package.json` (`appConfig.version`). |
118 | 39 |
|
119 | | -- Main branch uses `semantic-release` with conventional commits to automate versions, changelog, git tag, and package.json updates. |
120 | | -- Run `pnpm release` on the main branch with push access; it updates `CHANGELOG.md`, bumps the version, and creates the release commit/tag. |
121 | | -- The current app version is surfaced in the footer from `appConfig.version` (pulled from `package.json`). |
122 | | - |
123 | | -## Testing |
124 | | - |
125 | | -This project is tested with BrowserStack. |
| 40 | +## Contributing |
| 41 | +- Use 2-space indentation and `<script setup lang="ts">`. |
| 42 | +- Prefer feature components under `components/features/` and shared primitives in `components/base/`. |
| 43 | +- Keep diffs small; follow existing naming (`PascalCase.vue`, route-based pages). |
0 commit comments