The official website for Osvauld - a framework for building peer-to-peer applications that prioritize privacy, security, and user control. This site showcases both Osvauld and Livnote, our collaborative document editor built with the Osvauld framework.
This website supports multiple languages to make Osvauld and Livnote accessible to users worldwide. We currently support:
- πΊπΈ English (en) - Default language
- π©πͺ German (de) - Deutsch
- π·πΊ Russian (ru) - Π ΡΡΡΠΊΠΈΠΉ
- π¨π³ Chinese (zh) - δΈζ
- π«π· French (fr) - FranΓ§ais
- πͺπΈ Spanish (es) - EspaΓ±ol
- π―π΅ Japanese (ja) - ζ₯ζ¬θͺ
- Framework: Astro - Static site generator with React components
- Styling: Tailwind CSS - Utility-first CSS framework
- Components: React components for interactive elements
- Animations: Framer Motion for smooth transitions
- Fonts: Self-hosted fonts with subset optimization
- Internationalization: Custom i18n implementation
βββ public/ # Static assets (fonts, images, icons)
β βββ fonts/ # Subsetted font files
β βββ assets/ # Images and logos
β βββ favicon.* # Site favicons
βββ src/
β βββ assets/ # Source assets
β β βββ icons/ # SVG icons as React components
β β βββ images/ # Source images
β β βββ logos/ # Logo components
β βββ components/ # Reusable components
β β βββ additional/ # Utility components
β β βββ livnote/ # Livnote-specific components
β β βββ osvauld/ # Osvauld-specific components
β β βββ Footer.astro # Site footer
β β βββ LanguageSelector.astro # Language switcher
β β βββ Navbar.astro # Site navigation
β βββ i18n/ # Internationalization
β β βββ locales/ # Translation files
β β β βββ en.json # English translations
β β β βββ de.json # German translations
β β β βββ ru.json # Russian translations
β β β βββ zh.json # Chinese translations
β β β βββ fr.json # French translations
β β β βββ es.json # Spanish translations
β β β βββ ja.json # Japanese translations
β β βββ ui.ts # TypeScript interfaces
β β βββ utils.ts # i18n utility functions
β βββ layouts/ # Page layouts
β βββ pages/ # Route pages
β β βββ [locale]/ # Localized pages
β β βββ index.astro # Homepage
β β βββ livnote.astro # Livnote page
β β βββ faq.astro # FAQ page
β β βββ story.astro # About page
β β βββ privacy.astro # Privacy policy
β β βββ terms.astro # Terms of service
β βββ styles/ # Global styles
β βββ fonts.css # Font declarations
β βββ Theme.css # Theme variables
βββ astro.config.mjs # Astro configuration
βββ tailwind.config.cjs # Tailwind configuration
βββ tsconfig.json # TypeScript configuration
βββ package.json # Dependencies and scripts
- Node.js 18+
- npm or yarn
# Clone the repository
git clone https://github.com/osvauld/landing.git
cd landing
# Install dependencies
npm install
# or
yarn install| Command | Action |
|---|---|
npm run dev |
Starts local dev server at localhost:4321 |
npm run build |
Build your production site to ./dist/ |
npm run preview |
Preview your build locally, before deploying |
npm run devThe site will be available at http://localhost:4321 with hot-reload enabled.
We welcome contributions to improve our translations! Help us make Osvauld and Livnote accessible to more people around the world.
Check our current supported languages in src/i18n/locales/. If you want to:
- Improve existing translations: Edit the corresponding JSON file
- Add a new language: Create a new JSON file following the naming pattern
All translation files are located in src/i18n/locales/:
en.json- English (reference file)de.json- Germanru.json- Russianzh.json- Chinesefr.json- Frenches.json- Spanishja.json- Japanese
Each translation file follows the same structure as en.json. Here's an example of the structure:
{
"nav": {
"github": "GitHub",
"documentation": "Documentation",
"faq": "FAQ",
"story": "Our story",
"visitOsvauld": "Visit Osvauld",
"tryLivnote": "Try Livnote"
},
"osvauldHero": {
"title": "Personal Internet<br />Complete Control<br />Absolute Privacy",
"subtitle": "Offline-first, end-to-end encrypted, peer-to-peer applications..."
},
"features": {
"title": "Features",
"peerToPeer": {
"title": "Peer-to-Peer by Default",
"description": "Apps connect directly - no middlemen, no servers in the way."
}
}
}When translating, please:
- Maintain the same JSON structure as the English file
- Preserve HTML tags like
<br />,<span>,<strong>etc. - Keep technical terms in English when appropriate (e.g., "peer-to-peer", "end-to-end encryption")
- Use natural, fluent language that sounds native to speakers
- Consider cultural context - some concepts may need adaptation
- Test your translations by running the development server
To add support for a new language:
-
Create the translation file:
cp src/i18n/locales/en.json src/i18n/locales/[language-code].json
-
Update the locale configuration in
astro.config.mjs:i18n: { defaultLocale: "en", locales: ["en", "de", "ru", "zh", "fr", "es", "ja", "new-lang"], // Add your language routing: { prefixDefaultLocale: false, }, }
-
Update the sitemap configuration in
astro.config.mjs:sitemap({ i18n: { defaultLocale: "en", locales: { en: "en", de: "de", ru: "ru", zh: "zh", fr: "fr", es: "es", ja: "ja", "new-lang": "new-lang", // Add your language }, }, })
-
Update the TypeScript types in
src/i18n/ui.ts:export type Locale = 'en' | 'de' | 'ru' | 'zh' | 'fr' | 'es' | 'ja' | 'new-lang';
-
Update utility functions in
src/i18n/utils.ts:const supportedLocales: Locale[] = ['en', 'de', 'ru', 'zh', 'fr', 'es', 'ja', 'new-lang']; const displayNames: Record<Locale, string> = { // ... existing languages 'new-lang': 'Native Name', };
After making changes:
-
Start the development server:
npm run dev
-
Navigate to your language:
- Visit
http://localhost:4321/[language-code]/ - Use the language selector in the navigation
- Check all pages: homepage, Livnote, FAQ, story, privacy, terms
- Visit
-
Verify everything works:
- All text displays correctly
- No missing translations (fallback to English)
- Navigation works properly
- Language selector shows your language
- Fork the repository
- Create a feature branch:
git checkout -b feature/improve-[language]-translations
- Make your changes to the translation files
- Test thoroughly using the development server
- Commit your changes:
git add src/i18n/locales/ git commit -m "Improve [Language] translations" - Push to your fork and create a pull request
We especially need help with:
- Improving existing translations for better fluency and accuracy
- Adding new languages for broader global reach
- Technical terminology consistency across languages
- Cultural adaptation of concepts and examples
- Questions about translations? Open an issue with the
translationlabel - Need help with a specific language? Mention native speakers in your issue
- Technical issues? Check existing issues or create a new one
To add a new font or weight:
- Download the
.woff2file from Google Webfonts Helper or similar - Place it in the
font-originalsdirectory
```bash
glyphhanger ./dist/**/*.html '--subset=./font-originals/*.woff2' --outputdir=./public/fonts --formats=woff2
```
Add the @font-face rule to src/styles/fonts.css:
@font-face {
font-family: 'Font Name';
font-style: normal;
font-weight: 400;
font-display: swap;
src: url('/fonts/font-name-subset.woff2') format('woff2');
}This project is licensed under the MIT License - see the LICENSE file for details.
We welcome contributions! Please see our Contributing Guidelines for details on how to get involved.
- Website: osvauld.com
- Email: abe@osvauld.com
- GitHub: @osvauld
Built with β€οΈ by the Osvauld team