A data-migration framework used on six projects.
Reference
Style guide
Everything the theme can render, on one page, with the source beside it.
Typography
Heading level one
Heading level two
Heading level three
Heading level four
Body copy sits at a comfortable measure — around 68 characters — because a line
longer than that makes the eye lose its place on the return sweep. This
paragraph contains bold text, italic text, inline code, a
link, and a footnote-style aside.
A blockquote is set in the display face. It is for something somebody said, not for something you want to emphasise — emphasis has its own markup. The design system, on itself
Buttons
</svg> With an icon</a>
{% include components/button.html label="Primary" url="/contact/" style="primary" %}
Badges and chips
Default Accent Shipped Deprecated Breaking Live
Callouts
The default. For an aside that is genuinely optional reading.
For context the reader needs but did not ask for.
For the happy path, or a confirmation that something worked.
For a foot-gun. Ignoring this costs the reader time.
For data loss, or anything that cannot be undone.
{% include components/callout.html type="warning" title="Governor limits apply"
text="This runs inside a trigger." %}
Code
Fenced code blocks are highlighted by Rouge and get a language label and a copy button added by the theme script:
public with sharing class AccountService {
// Bulkified by default — a query inside a loop is the most expensive
// mistake you can make in Apex, and the easiest one to make.
public static void touchAll(List<Account> accounts) {
Map<Id, Account> byId = new Map<Id, Account>(accounts);
List<Contact> children = [
SELECT Id, AccountId FROM Contact WHERE AccountId IN :byId.keySet()
];
for (Contact c : children) {
c.Description = 'Touched ' + System.now().format();
}
update children;
}
}
import { LightningElement, api, wire } from 'lwc';
import findAccounts from '@salesforce/apex/AccountService.find';
export default class AccountList extends LightningElement {
@api recordId;
@wire(findAccounts, { term: '$recordId' }) accounts;
}
Steps
- Create a scratch orgTakes about ninety seconds.
-
Push the source
sfdx force:source:push - Assign the permission setOtherwise nothing is visible.
Tabs
Add the gem to your Gemfile and run bundle install.
Set remote_theme: in _config.yml — no gem required.
Clone the repository and edit it directly. Most flexible, hardest to update.
Accordion
Does the theme work on GitHub Pages?
Yes. Every plugin it uses is on the GitHub Pages allowlist.
Do I need Node?
No. There is no JavaScript build step — the one script file ships as-is.
Can I change the colour?
One line in _config.yml regenerates the entire ramp.
Stats
Table
| Front matter | Type | What it does |
|---|---|---|
hero_style |
string | statement, split, band or minimal |
sidebar |
boolean | Shows the right rail on an article |
comments |
boolean | Renders the comment thread, if one is configured |
image |
path | Cover image, and the Open Graph share image |
Breadcrumb
Series stepper
Audio player
Lesson list
- Why this Flow should be codeThe three signs an automation has outgrown the canvas.14 min
- Reading Apex before writing it18 min
- Your first trigger21 min
Outcomes & prerequisites
- Read a production trigger without slowing down
- Know the three collection types and when each earns its place
- Comfortable building record-triggered Flows
- A free Developer Edition org
Testimonial
The collections lesson alone was worth it.
Repo card
Pagination
Certifications
Timeline
-
2018 Passed Platform Developer I
On the second attempt, which nobody puts on LinkedIn.
-
Now Working on integration architecture