Skip to main content

Project file

Related links:

The project file (project.yaml) sets out the structure of the deck.

Basic example:

version: 2
name: Demo
src: ./src
dist: ./dist
key: demo
maintainer: your.email@example.org
servers:
- title: Production
api: 'https://server.livepreso.com'
- title: Staging
api: 'https://staging-server.livepreso.com'
dimensions:
width: 1920
height: 1080
common:
js:
- js/deck.js
css:
- css/core.css
hooks: js/hooks/hooks.js
feeds: {}
fixtures:
feeds: feeds.json
context: context.json
screenshotpreferences:
backend: chrome
vector: true
sections:
- key: were_innovative
title: "We're innovative"
slides:
- { key: introduction, title: "Introduction" }
- { key: super_stats, title: "Super stats" }
- { key: fancy_infographic, title: "Fancy infographic" }
- key: product_suite
title: "Product suite"
- key: thank_you
title: "Thank you"

See Project file overview for more information.

version

Project file version number.

version: 2

name

What the deck will be called in the CDK.

name: Demo

src

Location of the source directory, relative to the project.yaml file.

src: ./src

dist

Location of the compiled output, relative to the project.yaml file.

dist: ./dist

key

Required for uploading content to servers using the publishing feature. Must match a pre-existing deck key on the server.

key: demo

maintainer

Contact email address for sending processing updates about your content.

maintainer: your.email@example.org

servers

List of relevant servers. Title is used to list the server in the CDK, api specifies the server address.

servers:
- title: Production
api: "https://server.livepreso.com"

dimensions

Deck dimensions. Available sizes are 1024 x 768 (4:3) and 1920 x 1080 (16:9).

dimensions:
width: 1920
height: 1080

You can also supply a list of dimensions, this is useful for supplying alternate dimensions for different parts of LivePreso.

dimensions:
- { name: Screen, width: 1920, height: 1080 }
- { name: A4, width: 960, height: 540 }

note

You must include dimensions in the list with the name Screen. This is used as the default for everything unless overriden for particular processes.

One such reason you might want to us a list is for setting specific dimensions for PDFs. See pdfpreferences for more info.

common

Refers to the javascript and css files which apply to the entire deck.

common:
js:
- js/deck.js
css:
- css/core.css

hooks

Points to the hooks.js file which references the fieldsets, selections and selection rules.

hooks: js/hooks/hooks.js

feeds

Used to pull in data from external sources. Specify a source and any required preprocessors for each feed.

feeds:
product-feed:
source: "http://{{ feed_host|default:'example.server.com' }}/api/{{ param|safe }}/{{ paramlist|safeseq|join:'/' }}.json"

preprocessors

Code run on the LivePreso server that modifies your feed just before the data is fetched.

feeds:
roi-feed:
source: "/api/roi/?account_id={{ account_id }}"
preprocessors:
- UseServerHostname
- AuthenticateWithSalesPresoApi

UseServerHostname

Replaces the hostname portion of your feed's source with the hostname of the LivePreso instance which is hosting your deck. Use this when your feed source is on the LivePreso server itself, and you would like the same feed declaration to work in the dev, staging and production server environments.

When using this preprocessor, leave the hostname out of your source; just include the path and any query params. To understand what final URL was hit when your feed is fetched, see getDebugInfo.

If you have a non-LivePreso API source with various environments like staging and production, this preprocessor is not suitable. Instead, control the hostname in the feed source using a context variable.

AuthenticateWithLivePresoApi

Adds authentication to your request that will allow use of the LivePreso API as a source of data. You'll be authenticated as the user who owns the preso at the time of the request.

AuthenticateWithSourceApi

Adds authentication to your request so that it can use a non-LivePreso API as a source of data. Auth is added for supported APIs by examining the URL of your request. Supported APIs include those where an integration between the LivePreso server and the non-LivePreso API has been made.

This works by inserting a LivePreso middle-man in the request/response chain. If you examine the final URL which was hit when your feed was fetched while using this preprocessor, you'll see the request was made to a path mentioning api-proxy. This proxy only adds authentication. Every other detail of the response is controlled by the upstream API which you set in the feed's source, even when the response is e.g. a HTTP 500.

feeds:
your_feed:
source: "https://some-private-api/api/test/"
preprocessors:
- AuthenticateWithSourceApi
note

You may be working on a project which directly references api-proxy in the feed source. This is how auth proxying was done before this preprocessor was available. AuthenticateWithSourceApi is easier to use and does not require fiddly encoding of the upstream URL; we suggest you upgrade.

enabled_lookup

Only fetch this feed if the referenced context variable is truthy. The lookup is a dotted path using exactly the same rules as template parameters appearing in source, though it doesn't require surrounding braces. See the Working with API data guide for more.

When enabled_lookup is not present on your feed object, the feed is always fetched.

feeds:
your_feed:
source: "https://optional-api.com/api/"
enabled_lookup: "config.optionalApiSelected"

fixtures

Define optional paths to fixture files, to provide feed and context data to the deck when they would otherwise be unavailable.

fixtures:
feeds: feeds.json
context: context.json

screenshotpreferences

Preferences for PDF and thumbnail screenshots.

screenshotpreferences:
backend: chrome
vector: true

The current available options are:

backend

Screenshot backend to use to generate screenshots. Current available option is chrome.

screenshotpreferences:
backend: chrome
vector: true
caution

phantomjs was originally available as a backend option, but has since been removed. Any presos created from old deck versions that would have used phantomjs will now be screenshot using Chrome.

vector

A boolean indicating whether to display the PDF rasterized (as pixels), or as a vector. Defaults to false.

screenshotpreferences:
backend: chrome
vector: true
info

Setting vector to true can improve the size of PDFs by a substantial amount by storing text as strings rather than as pixels.

pdfpreferences

Preferences for PDFs screenshots.

defaultDimensions

dimensions:
- { name: Screen, width: 1920, height: 1080 }
- { name: A4, width: 960, height: 540 }
pdfpreferences:
defaultDimensions: A4

Select a different set of dimensions than the default during the PDF process. In the example above it will be 1920x1080 during presentations and thumbnail screenshots, but 960x540 during PDF.

note

The default value will be "Screen", even if you have multiple values. Make sure to set this value to the correct name to apply the dimension changes.

sections

Breakdown of sections and slides that make up the deck.

sections:
- key: were_innovative
title: "We're innovative"
slides:
- { key: introduction, title: "Introduction" }
- { key: super_stats, title: "Super stats" }
- { key: fancy_infographic, title: "Fancy infographic" }

key

Section key for use in tracking, and any other references to that section/slide.

sections:
- key: were_innovative
title: "We're innovative"

title

Verbose name for the section/slide.

sections:
- key: thank_you
title: "Thank you"

maxAdjunctSlides

Specify custom slide limits per section.

sections:
- key: product_suite
title: "Product suite"
maxAdjunctSlides: -1
ValueResponse
-1Unlimited custom slides
0Custom slides disabled (default)
1or more Custom slides capped at specified value
info

Requires custom slide upload permissions to be enabled per-user. See the enabling custom slides guide.

tags

Used to add extra information to sections/slides. Tags can be custom-defined by the content developer, or they can be LivePreso tags with predetermined functionality. Tags can be added to slides via the project.yaml , or by an admin using PresoManager.

sections:
- key: your_quarterly_review
title: "Your quarterly review"
tags: [your-tag]
slides:
- { key: checklist, title: "Check list", tags: [prep-only] }

Tagging the welcome slide

To add tags to the welcome slide, add welcome to the project.yaml at the same level as sections.

welcome:
tags: [custom-tag]
sections:
- key: your_quarterly_review
title: "Your quarterly review"
tags: [your-tag]
note

Tags are currently the only attribute that can be applied to the welcome slide in the project.yaml.

warning

The LivePreso system tag can not be applied to the welcome slide. there are no restrictions on custom tags.

LivePreso tags
TagDescription
prep-onlyOnly visible in Prep mode
preview-only(deprecated) - Same as prep-only
not-for-sharingNot included in SharePresos or PDFs
not-for-pdf-exportNot included in PDFs
off-by-defaultTurned off on preso creation
subslide_containerContains adjunct subslides

slides

Collection of slides belonging to that section. Each slide requires a key and title.

sections:
- key: were_innovative
title: "We're innovative"
slides:
- { key: introduction, title: "Introduction" }
- { key: super_stats, title: "Super stats" }
- { key: fancy_infographic, title: "Fancy infographic" }

templates

A list of the reusable slide templates, as defined in your /templates directory.

templates:
- key: template_product
title: "Product template"
- key: template_editorial
title: "Editorial template"

key

A unique identifying key for your template. It's how the app will locate the template's files in the folder

templates:
- key: template_product
title: "Product template"

title

Verbose name for the template

templates:
- key: template_editorial
title: "Editorial template"

require_verification

Adds a modal before the salesperson presents to accept that the presentation data is correct.

require_verification: true

notify_salesperson_after_feeds_fetched

For instances where feeds can take a long time to fetch this will send a notification to the user when the feeds have finished fetching.

notify_salesperson_after_feeds_fetched: true

point_in_time_share_policy

Controls whether a share is point-in-time (it never updates even if you update the preso), or whether a share is always up to date.

point_in_time_share_policy: always
ValueDescription
alwaysShare data is locked (default)
neverShare is always up to date
ask (future feature)When a share is sent, ask the user if they want it to stay updated or not

has_editable_share_support

Allows handing over a share to be edited by a contact. This adds a new area to select the editor in the sharing modal.

has_editable_share_support: true

has_signing_support

Adds a toggle to the appointment create/edit page to turn on digital signatures. With this enabled, a signing request can be made for these presos.

has_signing_support: true

requires_user_connectivity

A list of known integrations we need to look out for in the app. At the moment, only xplan is supported. This is used to make sure the user has a connection to the particular integration before accessing things like feeds, etc.

requires_user_connectivity: ["xplan"]