Different fonts besides standard and serif?

Is there a way to use custom fonts?

No (t yet)…

We’re holding thumbs though.

2 Likes

Not yet but there’s been hints it’s on the backlog somewhere.

There’s a few ways to achieve custom font look for now:

  • With SVG in images — either composed in Coda, returned by a Pack, or pre-rendered by a vector editing app and exported as curves.

    Limitation: won’t load external fonts. You’ll either have to embed font files inline as data URIs, use inline SVG font definitions, or convert to curves.

  • With Itsy embeds — those will be full custom HTML pages with all web capabilities including interactivity (e.g. mouse-over effects) and loading any external web resources, e.g. Google Fonts or any other hosted fonts.

    Limitation: they don’t load as quickly and there’s often a noticeable “error” state that stays there for a while until the web-app is re-hosted (often a couple of seconds)

  • With raster images — either prepared manually in image editing apps, or created on the fly with my Edit Images pack (MakeTextBlock() formula). I’m using this approach in my landing page.

    Limitations: those are raster not vector; limited typesetting capabilities; only a defined selection of fonts; no way to support dark mode.

2 Likes

Indeed; this is a challenge. As long as it is request-driven and there is no long-running persistence in temporary blob storage, these subtle delays will be there. Ideally, this will soon vanish with either more persistent storage or an event-driven capability.

I’ve found that passing a dynamic timestamp parameter [timestamp: Minutes(Now())] will remedy this issue. It serves to sustain the app in the temporary blob storage. This is not ideal because it’s forcing Coda to refresh at a rate that is a little discomforting. Perhaps even this is ignored when the Pack cache refresh logic intercedes. While the documentation indicates long cache refresh intervals may be ignored, I’m reluctant to experiment to find the upper bounds. Itsy()'s code is freely available so have at it. :wink:

Imagine a temporary blob storage that supported a 24 hour setting and a simple automation that re-builds apps like this at night. Integrated web apps change infrequently, so it would be nice to have blob storage with persistence at varying ranges.

A more persistent virtual file system could be useful for many things, not just as a web app servlet. I would love to be able to cache data sets, states, and a number of artifacts that improve Pack application performance. Fonts are also one of those things that change infrequently, but could benefit from intra-Pack executions.

1 Like

For anyone reading this, please don’t Minute(Now()), use Now("minute") instead.

The first one ticks every second. Even though the result doesn’t change and the formula doesn’t cause the cascade of recalculations, it still recalculates itself.

The latter properly ticks only when a minute passes.

4 Likes

Hmmm… the logs for the Pack show Minute(Now()) fires every 60 seconds.

1 Like

Pack yes, formula no. See “Debug calculations” in the doc itself.

2 Likes