Recipe catalog / content-freshness-signal
Detect perishable content
Does content contain claims that are likely to go stale, such as prices, versions, dates, current events, or latest wording?
You schedule content reviews, decide which pages need dated review notes, or want to flag articles that will silently become wrong.
Explore this recipe interactively ยท Source and implementation guide
Use content-freshness-signal in TypeScript
Install with npm install jev-recipes. Requires Node.js 22.9 or newer and ES modules. Set TYPESAFE_API_KEY in your server environment for live calls, which send input to TypeSafe and use API quota. See the installation guide.
import { contentFreshnessSignal } from 'jev-recipes/content-freshness-signal';
const result = await contentFreshnessSignal({
"content": "Getting started with Node.js\n\nThe latest LTS release, Node 22, ships with built-in test runner support and a stable fetch API. Download the installer from nodejs.org; the current version is 22.11.0. Hosting on a small VPS costs around $6 per month with most providers this year. Once installed, run node --version to confirm the install.",
"minConfidence": 0.8
});
console.log(result);
Input contract
| Field | Type | Needed |
|---|---|---|
| content | string | Required |
| minConfidence | number | Optional |
Full input and result schemas
{
"input": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"content": {
"type": "string"
},
"minConfidence": {
"type": "number",
"minimum": 0,
"maximum": 1
}
},
"required": [
"content"
]
},
"result": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"model": {
"type": "string"
},
"usage": {
"type": "object",
"properties": {
"input_tokens": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"output_tokens": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
}
},
"required": [
"input_tokens",
"output_tokens"
],
"additionalProperties": false
},
"status": {
"type": "string",
"enum": [
"ready",
"review"
]
},
"probability": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"confidence": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"verdict": {
"type": "string",
"enum": [
"perishable",
"evergreen"
]
}
},
"required": [
"model",
"usage",
"status",
"probability",
"confidence",
"verdict"
],
"additionalProperties": false
}
}Saved example result
This hand-authored response demonstrates the contract. It is not a model accuracy measurement. Run it without an API key: npx jev-recipes demo content-freshness-signal.
{
"model": "demo-fixture",
"usage": {
"input_tokens": 0,
"output_tokens": 0
},
"status": "ready",
"probability": 0.95,
"confidence": 0.95,
"verdict": "perishable"
}
Evaluation evidence
No verified live accuracy measurement is available. Evaluate representative cases before using this decision in your workflow.
Use the evaluation guide to measure this decision on your own labeled cases.
Limitations
- Flags the presence of perishable claims; it does not say whether they are currently accurate or when they will expire.
- Does not know today's date. Review schedules and expiry calculations belong in code.
Related recipes
- fact-stability: Use fact-stability to judge a single stored fact rather than a whole piece of content.
- freshness-needed: Use freshness-needed to decide whether a question requires current information to answer.