Contracts¶
Send a performance contract to an artist, have them sign it from their portal, countersign it from the back-office, and archive a verified, locked PDF — without leaving Festinato.
This page covers how contract templates work and the merge variables you can use inside them. Everything here is configured from the back-office under Festinato → Artists → Contract Templates and Festinato → Artists → Contracts; no code deploy is involved.
How it fits together¶
- A project manager writes a template once — the reusable legal text
with placeholders like
{artist_name}and{fee}. - When you create a contract for an artist and pick the template, the placeholders are substituted against that artist + edition and the result is written into the contract body. You can still tweak the body by hand while the contract is in Draft.
- On Send, the body is frozen and the artist is emailed a portal link to review and sign.
- The artist signs in the portal (typed name + drawn signature). You countersign from the back-office, which produces the final signed PDF and emails a copy to both parties.
Templates are a convenience, not the contract
The template only seeds the body of a contract at creation time. Editing a template later never changes the text of contracts that were already created or sent from it — see Freezing below.
Creating a template¶
Festinato → Artists → Contract Templates → New
| Field | What it does |
|---|---|
| Name | Internal label, e.g. Standard performance contract. Shown when picking a template on a contract. |
| Email subject | Optional. Subject line of the "your contract is ready to sign" email. Leave blank to use the default Your contract for {edition_name}. |
| Active | Untick to retire a template without deleting it; inactive templates stay attached to contracts already created from them. |
| Body | The contract text, edited in the rich-text (HTML) editor. This is where you place the merge variables. |
| PM notes | Internal-only notes about when to use this template. Never shown to the artist. |
Write the body as you want it to read, dropping a placeholder anywhere the text should be personalised. For example:
This agreement is made on {today} between the festival and {artist_name}
for {edition_name}.
Performance: {slot_summary}
Fee: {fee}
Should the artist cancel, a penalty of {penalty} applies.
Signed for the festival by {festival_signer_name}.
Supported variables¶
Placeholders are written in single curly braces and substituted when a contract is created from the template. They are filled from the artist and edition you picked on the contract.
| Placeholder | Renders | Source |
|---|---|---|
{artist_name} |
The artist's name. | Artist record |
{edition_name} |
The edition the contract is for, e.g. Summer Fest 2026. | Edition record |
{slot_summary} |
The artist's confirmed slots for that edition, comma-separated, each as Sat 12 Jul 20:00 · Main Stage. Cancelled slots are omitted. |
Schedule |
{fee} |
The free-form Fee entered on the contract, e.g. CHF 1200. | Contract's Fee field |
{penalty} |
The Penalty amount agreed on the artist's booking for that edition, formatted with its currency, e.g. CHF 1,500.00. Renders blank when no booking or penalty is set. | Edition booking (Artist → Booking Details) |
{festival_signer_name} |
The printable name of the festival countersigner configured on the edition (falls back to that user's name). | Edition → Contract signing |
{today} |
The date the contract is created, e.g. 28 May 2026. | System clock |
{currency} |
Reserved. Currently always renders blank — there is no separate currency field. Put the currency directly in the Fee value (e.g. CHF 1200) and use {fee} alone. |
— |
Syntax rules¶
- Unknown placeholders are left untouched. Anything in
{curly}braces that isn't a known variable — say{future_field}— is rendered verbatim, braces and all. This makes templates forgiving: a typo shows up plainly in the draft instead of erroring or silently vanishing. - These are simple placeholders, not expressions. You can't write formulas or conditions — only the variables listed in the table above are recognised.
- To print a literal brace, double it:
{{renders as{and}}as}. - Keep braces matched. A placeholder missing its closing
}(e.g.{feewith no closing brace) won't be substituted — the body is left as-is so you'll notice in the draft before sending.
Preview before sending
Because rendering happens at create time, the substituted text appears in the contract's Body tab immediately. Review it there — and edit it freely while the contract is still in Draft — before you hit Send to artist.
Configuring the countersigner¶
{festival_signer_name} and the festival signature on the final PDF come
from the edition, not the template:
Festinato → Editions → (your edition) → Contract signing
- Signer — the back-office user who countersigns contracts for this edition.
- Signer name — the printable name on the contract (defaults to the
user's name). This is what
{festival_signer_name}resolves to. - Signature image — the signature graphic stamped onto the countersigned PDF.
A contract can't be countersigned until both the signer and the signature image are set, so Festinato never produces a half-signed PDF.
The contract lifecycle¶
A contract moves through five states:
| State | Meaning |
|---|---|
| Draft | Body is editable. Created from a template (or written from scratch). |
| Sent | Emailed to the artist; awaiting their signature. Body is now frozen. |
| Signed by artist | The artist has signed in the portal; awaiting countersignature. |
| Countersigned | Both parties have signed; the final PDF is generated and emailed. |
| Void | Cancelled. A new contract must be created to replace it. |
You can pull a Sent contract back to Draft to fix a typo before the artist signs. Once any signature is on the record, the only way back is to Void it and create a fresh one — this keeps the audit trail honest.
Freezing and verification¶
When you click Send to artist:
- The rendered body is frozen — it can no longer be edited (the back-office refuses edits past Draft).
- A unique fingerprint of the contract text is recorded. The same fingerprint appears in the audit footer of the final PDF, so the signed text can always be verified as unchanged.
This is why editing a template after the fact is safe: the legal text of an already-sent contract is locked to what the artist actually saw and signed.
Emails¶
Two emails are sent automatically:
- Invitation to sign — when you Send the contract. Subject comes from the template's Email subject, or defaults to Your contract for {edition_name}.
- Countersigned copy — when you countersign; the fully-signed PDF is attached and sent to both the artist and the festival signer.
The wording of both emails is editable under Settings → Technical → Email Templates (templates Contract — invitation to sign and Contract — countersigned). If outbound mail isn't configured, the contract is still marked as sent and remains reachable from the artist's portal — a warning is logged on the contract's chatter.