Platform for systemic change.
Mikrouli leverages a modern web platform, combining performance, scalability, and maintainability. It is built using SvelteKit, Tailwind CSS, and powered by Contentful as a headless CMS. The platform emphasizes a seamless developer experience and user-centric design.
For macOS we recommend using Homebrew For Windows we recommend using Scoop
Install Node.js (v22 or newer):
Follow the Node.js documentation.
brew install node
or brew install nvm
scoop install nodejs
or use nvm for windowsInstall Bun (v1 or newer):
Follow the Bun installation guide.
brew install oven-sh/bun/bun
or curl -fsSL https://bun.sh/install | bash
scoop bucket add main
&& scoop install bun
or powershell -c "irm bun.sh/install.ps1 | iex"
Install project dependencies:
bun install
Quick start by running bun i && bun start
.
bun start
is a shorthand forbun dev --open & bun run watch
.
Install dependencies:
bun install
Start the development server:
bun run dev --open
Optionally, run the svelte-check watcher for code checks:
bun run watch
To fetch live content from Contentful, add a .env
file to the project root,
you can use .env.example
file as a template:
CONTENTFUL_SPACE_ID=<Your Contentful Space ID>
CONTENTFUL_ACCESS_TOKEN=<Your Contentful Access Token>
PUBLIC_ENVIRONMENT=development
Development Server:
bun run dev
Build:
bun run build
Code Checks:
bun run check
Fetch Content:
bun run content:cms
Clean and Reset:
bun run util:clean
Mikrouli integrates with Contentful for content management. The workflow:
fetchContent.js
to retrieve raw data from
Contentful.GitHub Actions handles CI/CD:
main
.Secrets such as
CONTENTFUL_SPACE_ID
andCONTENTFUL_ACCESS_TOKEN
are securely managed via GitHub.
The project is modular and organized as follows, also refer to sveltekit project structure:
.
├── docs/ # Project documentation
├── scripts/ # Helper scripts
├── src/ # Application source code
│ ├── lib/
│ │ ├── components/ # Svelte UI components
│ │ ├── images/ # Image assets
│ │ ├── data/ # JSON data files (generated from contentful)
│ │ ├── server/ # Server-only lib files
│ │ ├── styles/ # Global styling
│ │ └── types / # Typing d.ts files for usage in jsdoc
│ ├── routes/ # SvelteKit route handlers
│ └── static/ # Static assets (e.g., favicon.svg)
├── .editorconfig # Editor configuration
├── .env # Environment variables (see .env.example)
├── .gitignore # Git ignore rules
├── .npmrc # npm configuration
├── biome.jsonc # Linting and formatting configuration
├── bun.lockb # Bun lock file
├── favicons.json # Favicon configuration
├── jsconfig.json # JavaScript configuration
├── lefthook.yml # Git hooks configuration
├── package.json # Project metadata
├── svelte.config.js # Svelte configuration
└── vite.config.js # Vite configuration
Issue | Solution |
---|---|
Installation fails | Verify Node.js and Bun versions meet requirements. |
Contentful fetch errors | Ensure .env exists and contains valid Contentful keys, see .env.example |
Build or dev errors | Run the clean script: bun run util:clean . |
In general, @apply
is not recommended.
In some cases it can be useful:
Alternative to using @apply
:
This serves as an example on how to do it (using @reference)
<style>
@reference "$lib/styles/theme.css";
@reference "$lib/styles/utilities.css";
.nav-menu--bottom {
@apply w-full flex justify-around fixed left-0 bottom-0 bg-primary-900 px-1 py-2;
}
.nav-menu--inline {
@apply flex relative gap-2 bg-primary-900;
}
.nav-menu__link {
@apply inline-block w-full text-center px-3 py-1 font-semibold;
}
</style>
Explore more in the docs/
directory: