docs: use sentence case for headings
This commit is contained in:
+10
-10
@@ -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
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
| | |
|
| | |
|
||||||
| ------------- | ------------------------------------------------- |
|
| ------------- | ------------------------------------------------- |
|
||||||
|
|||||||
Reference in New Issue
Block a user