docs: use sentence case for headings

This commit is contained in:
Linus Rath
2026-07-25 17:46:48 +02:00
parent 934967b9df
commit 9c04950a94
3 changed files with 19 additions and 19 deletions
+10 -10
View File
@@ -14,7 +14,7 @@ We're writing the webmail we wanted in 2026 and didn't find: a JMAP-native clien
If that sounds like your kind of project, we'd love the help. If that sounds like your kind of project, we'd love the help.
## Join the Community ## Join the community
You don't need to be an expert to contribute. A dev environment that won't start, a bug you're not sure how to report, a translation you're stuck on: Discord is the fastest way to get unstuck and to meet the people working on this. You don't need to be an expert to contribute. A dev environment that won't start, a bug you're not sure how to report, a translation you're stuck on: Discord is the fastest way to get unstuck and to meet the people working on this.
@@ -26,9 +26,9 @@ You don't need to be an expert to contribute. A dev environment that won't start
--- ---
## Getting Started ## Getting started
### Development Setup ### Development setup
1. **Fork and clone** the repository: 1. **Fork and clone** the repository:
@@ -61,7 +61,7 @@ You don't need to be an expert to contribute. A dev environment that won't start
Then open http://localhost:3000. Then open http://localhost:3000.
### Code Quality ### Code quality
Before submitting a pull request, ensure your code passes all checks: Before submitting a pull request, ensure your code passes all checks:
@@ -91,7 +91,7 @@ Run a single unit test file with `npx vitest run lib/__tests__/<name>.test.ts`,
The integration suite needs Docker and takes several minutes; it has its own setup notes and findings log in [integration/README.md](integration/README.md). New behavior that touches mail/folder synchronization or multi-account handling belongs there. The integration suite needs Docker and takes several minutes; it has its own setup notes and findings log in [integration/README.md](integration/README.md). New behavior that touches mail/folder synchronization or multi-account handling belongs there.
## Code Style Guidelines ## Code style guidelines
### TypeScript ### TypeScript
@@ -100,7 +100,7 @@ The integration suite needs Docker and takes several minutes; it has its own set
- Avoid `any` types when possible - Avoid `any` types when possible
- Use meaningful variable and function names - Use meaningful variable and function names
### React Components ### React components
- Use functional components with hooks - Use functional components with hooks
- Keep components focused and single-purpose - Keep components focused and single-purpose
@@ -160,9 +160,9 @@ For a right-to-left language, also add the code to `rtlLocales` in `i18n/directi
Run `npm run test:translations` afterwards - it checks the locale files for structural drift against English. Run `npm run test:translations` afterwards - it checks the locale files for structural drift against English.
## Pull Request Process ## Pull request process
### Before Submitting ### Before submitting
1. **Create a feature branch**: 1. **Create a feature branch**:
@@ -191,7 +191,7 @@ Run `npm run test:translations` afterwards - it checks the locale files for stru
- Screenshots for UI changes - Screenshots for UI changes
- Reference to any related issues - Reference to any related issues
### Commit Message Convention ### Commit message convention
Follow the conventional commits format: Follow the conventional commits format:
@@ -211,7 +211,7 @@ fix: resolve attachment download issue
docs: update README with keyboard shortcuts docs: update README with keyboard shortcuts
``` ```
## Project Structure ## Project structure
``` ```
webmail/ webmail/
+4 -4
View File
@@ -54,7 +54,7 @@
- Trusted senders live in their own JMAP address book - Trusted senders live in their own JMAP address book
- Autocomplete on To, Cc, and Bcc - Autocomplete on To, Cc, and Bcc
## Filters & Templates ## Filters & templates
- Server-side filters as JMAP Sieve Scripts (RFC 9661) - Server-side filters as JMAP Sieve Scripts (RFC 9661)
- A visual rule builder: conditions on From, To, Subject, Size, Body, Attachment and more, each matching multiple values, with actions to move, forward, star, or discard - A visual rule builder: conditions on From, To, Subject, Size, Body, Attachment and more, each matching multiple values, with actions to move, forward, star, or discard
@@ -73,7 +73,7 @@
- Cut, copy, paste, duplicate; favorites; recent files - Cut, copy, paste, duplicate; favorites; recent files
- JMAP sharing (RFC 9670) for files and folders. Pick a user or group from the principal picker and grant read, read/write, or manager. Shared items get an indicator, and anything other principals share with you appears under "Shared with me". - JMAP sharing (RFC 9670) for files and folders. Pick a user or group from the principal picker and grant read, read/write, or manager. Shared items get an indicator, and anything other principals share with you appears under "Shared with me".
## Security & Privacy ## Security & privacy
- External content stays blocked until you say otherwise, and trusted senders are remembered - External content stays blocked until you say otherwise, and trusted senders are remembered
- HTML sanitized through DOMPurify - HTML sanitized through DOMPurify
@@ -111,7 +111,7 @@
- The browser's `Accept-Language` picks the first language, and the choice persists per user - The browser's `Accept-Language` picks the first language, and the choice persists per user
- `NEXT_PUBLIC_DEFAULT_LOCALE` sets the fallback, `NEXT_PUBLIC_LOCALE_PREFIX` the URL prefix - `NEXT_PUBLIC_DEFAULT_LOCALE` sets the fallback, `NEXT_PUBLIC_LOCALE_PREFIX` the URL prefix
## Identity & Multi-Account ## Identity & multi-account
- Run several accounts at once and switch instantly, each keeping its own session. The 5-account cap lifts on HTTP/2 servers; on HTTP/1.1, browser connection pooling still sets the limit. - Run several accounts at once and switch instantly, each keeping its own session. The 5-account cap lifts on HTTP/2 servers; on HTTP/1.1, browser connection pooling still sets the limit.
- An account switcher showing connection status, and a default account - An account switcher showing connection status, and a default account
@@ -123,7 +123,7 @@
- Several JMAP servers per deployment, optionally auto-picked by email domain - Several JMAP servers per deployment, optionally auto-picked by email domain
- Custom JMAP endpoints on the login form, when `ALLOW_CUSTOM_JMAP_ENDPOINT` permits it - Custom JMAP endpoints on the login form, when `ALLOW_CUSTOM_JMAP_ENDPOINT` permits it
## Admin & Extensibility ## Admin & extensibility
- A setup wizard runs on first launch and walks through JMAP servers, OAuth/OIDC, the session secret, logging, branding (uploads included), and the admin password. It writes to the admin config dir, so `.env.local` stays untouched. - A setup wizard runs on first launch and walks through JMAP servers, OAuth/OIDC, the session secret, logging, branding (uploads included), and the admin password. It writes to the admin config dir, so `.env.local` stays untouched.
- The Stalwart admin dashboard, its policy sections collapsed into one tabbed page - The Stalwart admin dashboard, its policy sections collapsed into one tabbed page
+5 -5
View File
@@ -70,7 +70,7 @@ The wizard writes to `ADMIN_CONFIG_DIR` (`./data/admin` by default). Setting `JM
</tr> </tr>
</table> </table>
## Overview ## What Bulwark includes
Bulwark is a full webmail suite. It bundles the four apps most self-hosters end up wanting: Bulwark is a full webmail suite. It bundles the four apps most self-hosters end up wanting:
@@ -85,7 +85,7 @@ Full feature list: **[FEATURES.md](FEATURES.md)**.
--- ---
## Quick Start ## Quick start
### Docker ### Docker
@@ -101,7 +101,7 @@ docker compose up -d
On first launch, open `http://localhost:3000` and the setup wizard takes over. Installs that already define `JMAP_SERVER_URL` skip it and keep the env-managed flow under [Configuration](#configuration). On first launch, open `http://localhost:3000` and the setup wizard takes over. Installs that already define `JMAP_SERVER_URL` skip it and keep the env-managed flow under [Configuration](#configuration).
### From Source ### From source
```bash ```bash
git clone https://github.com/bulwarkmail/webmail.git git clone https://github.com/bulwarkmail/webmail.git
@@ -308,7 +308,7 @@ Then point your reverse proxy at the container without stripping the prefix. The
</details> </details>
## Keyboard Shortcuts ## Keyboard shortcuts
| Key | Action | | Key | Action |
| -------------------- | ----------------------- | | -------------------- | ----------------------- |
@@ -331,7 +331,7 @@ Then point your reverse proxy at the container without stripping the prefix. The
In the composer: `Ctrl/Cmd`+`Enter` sends, `Ctrl/Cmd`+`Shift`+`Enter` opens scheduled send, and `t` opens the template picker. In the composer: `Ctrl/Cmd`+`Enter` sends, `Ctrl/Cmd`+`Shift`+`Enter` opens scheduled send, and `t` opens the template picker.
## Tech Stack ## Tech stack
| | | | | |
| ------------- | ------------------------------------------------- | | ------------- | ------------------------------------------------- |