This is the source code for the Capgo website, built with Astro.
To start the development server, run:
bun install
bun run dev
The website is deployed to Cloudflare Pages. The deployment is automated using a GitHub action.
The source code is licensed under the GNU AFFERO GENERAL PUBLIC license. See the LICENSE file for details.
Inside of your Astro project, you'll see the following folders and files:
/
├── public/
│ └── favicon.svg
├── src/
│ ├── components/
│ │ └── Card.astro
│ ├── layouts/
│ │ └── Layout.astro
│ └── pages/
│ └── index.astro
└── package.json
Astro looks for .astro
or .md
files in the src/pages/
directory. Each page is exposed as a route based on its file name.
There's nothing special about src/components/
, but that's where we like to put any Astro/React/Vue/Svelte/Preact components.
Any static assets, like images, can be placed in the public/
directory.
All commands are run from the root of the project, from a terminal:
Command | Action |
---|---|
bun install |
Installs dependencies |
bun run dev |
Starts local dev server at localhost:3000 |
bun run build |
Build your production site to ./dist/ |
bun run preview |
Preview your build locally, before deploying |
bun run astro ... |
Run CLI commands like astro add , astro check |
bun run astro -- --help |
Get help using the Astro CLI |
The website aims at having an automatic i18n done via various scripts in the scripts
directory.
The translations.tsx script is used to translate the website content into the desired language. It has two methods to create translations, via OpenAI API
or Anthropic API
, and the other via api.datpmt.com
. To use the OpenAI API method, make sure you have an OPENAI_API_KEY
or ANTHROPIC_API_KEY
as the environment variable set. To use the other API, just un-comment the translateText
function call using it.
Now, let's say that you want to update translations or add a new locale, fr
.
First, make sure to update the files scripts/setup_new_locale.tsx
and scripts/generate_locale_translations.tsx
to have the latest locale values as the following respectively.
const newLocale = 'fr'
const locales = ['fr']
Now to have translations generated for fr
, you'd want to run:
bun run setup:new:locale
: This script copies the existing files insrc/pages
directory tosrc/pages/fr
directory and makes sure to replace each reference tocontent/blog
tocontent/fr/blog
. Then, it copies thesrc/content/blog
directory tosrc/content/fr/blog
and makes sure to setlocale
frontmatter in each markdown file asfr
. Then, it runs all the translation scripts mentioned below.bun run generate:locale:translations
: This script uses the translate function to translate theen.yml
key value pairs into the desired language, and creates afr.yml
file.bun run generate:translation.ts
: This script uses all the.yml
files in thelocales
directory to generate two files,src/services/locale.ts
andsrc/services/translation.ts
files with all the locales translations key value pair.bun run generate:blog:translations
: This script uses all the.md
files in thesrc/content/blog
directory to generate the translated version of the file in thesrc/content/fr/blog
directory.bun run generate:plugin:translations
: This script uses all the.md
files in thesrc/content/plugins-tutorials
directory to generate the translated version of the file in thesrc/content/fr/plugins-tutorials
directory.