addedInput schema / properties / build_tool
Added value: +{
+ "description": "The build tool the user named, as a coding vendor id (lovable, bolt, replit, base44, v0, cursor, claude-code, github-copilot…): the plan uses it. An app builder that hosts the app and runs its database and sign-in (Lovable, Bolt, Replit, Base44) covers those, so they are not planned separately.",
+ "maxLength": 40,
+ "type": "string"
+}
addedInput schema / properties / builder_profile
Added value: +{
+ "description": "Who builds it. developer picks an AI coding agent, non_developer an app builder (and counts setup work double). Given without categories, the plan adds the build tool (coding).",
+ "enum": [
+ "developer",
+ "non_developer",
+ "unknown"
+ ],
+ "type": "string"
+}
changedInput schema / properties / categories / description
Previous value: -"Plan these categories. Default: what the description needs (a web app gets hosting, database, sign-in, email, payments and observability; an on-device app only what it names)."New value: +"Plan these categories. Default: a build tool (an AI app builder or coding agent) plus what the description needs (a web app gets hosting, database, sign-in, email, payments and observability; an on-device app only what it names; a one-sentence idea such as a pantry tracker what that kind of app usually needs)."
changedInput schema / properties / categories / items / enum
Previous value: -[
- "hosting",
- "database",
- "auth",
- "email",
- "payments",
- "observability",
- "ai",
- "edge",
- "app_store",
- "coding"
-]New value: +[
+ "hosting",
+ "database",
+ "auth",
+ "email",
+ "payments",
+ "observability",
+ "ai",
+ "edge",
+ "app_store",
+ "coding",
+ "storage",
+ "video",
+ "sms",
+ "push",
+ "jobs",
+ "search"
+]
addedInput schema / properties / confirmed
Added value: +{
+ "description": "Ids of questions whose assumption the user confirmed as right (e.g. [\"region\", \"builder\"]), so the plan stops asking them. A question answered with a figure goes in its own argument instead (per_user, revenue_per_mau_usd…).",
+ "items": {
+ "maxLength": 40,
+ "type": "string"
+ },
+ "maxItems": 20,
+ "type": "array"
+}
addedInput schema / properties / per_user
Added value: +{
+ "additionalProperties": false,
+ "description": "Usage per active user a month, e.g. {\"sms\": 2, \"file_storage_gb\": 0.2, \"ai_input_ktok\": 30}. Replaces the profile and the filled-in defaults for those units; a plan's questions say which unit each answer sets. Units: mau, seat, request_million, bandwidth_gb, db_storage_gb, egress_gb, email, event, error_event, compute_hour, revenue_usd, transaction, ai_input_ktok, ai_output_ktok, kv_read, kv_write, ci_hour, file_storage_gb, file_egress_gb, file_write, file_read, video_min_stored, video_min_delivered, sms, job_run, search_request, search_record.",
+ "properties": {
+ "ai_input_ktok": {
+ "minimum": 0,
+ "type": "number"
+ },
+ "ai_output_ktok": {
+ "minimum": 0,
+ "type": "number"
+ },
+ "bandwidth_gb": {
+ "minimum": 0,
+ "type": "number"
+ },
+ "ci_hour": {
+ "minimum": 0,
+ "type": "number"
+ },
+ "compute_hour": {
+ "minimum": 0,
+ "type": "number"
+ },
+ "db_storage_gb": {
+ "minimum": 0,
+ "type": "number"
+ },
+ "egress_gb": {
+ "minimum": 0,
+ "type": "number"
+ },
+ "email": {
+ "minimum": 0,
+ "type": "number"
+ },
+ "error_event": {
+ "minimum": 0,
+ "type": "number"
+ },
+ "event": {
+ "minimum": 0,
+ "type": "number"
+ },
+ "file_egress_gb": {
+ "minimum": 0,
+ "type": "number"
+ },
+ "file_read": {
+ "minimum": 0,
+ "type": "number"
+ },
+ "file_storage_gb": {
+ "minimum": 0,
+ "type": "number"
+ },
+ "file_write": {
+ "minimum": 0,
+ "type": "number"
+ },
+ "job_run": {
+ "minimum": 0,
+ "type": "number"
+ },
+ "kv_read": {
+ "minimum": 0,
+ "type": "number"
+ },
+ "kv_write": {
+ "minimum": 0,
+ "type": "number"
+ },
+ "mau": {
+ "minimum": 0,
+ "type": "number"
+ },
+ "request_million": {
+ "minimum": 0,
+ "type": "number"
+ },
+ "revenue_usd": {
+ "minimum": 0,
+ "type": "number"
+ },
+ "search_record": {
+ "minimum": 0,
+ "type": "number"
+ },
+ "search_request": {
+ "minimum": 0,
+ "type": "number"
+ },
+ "seat": {
+ "minimum": 0,
+ "type": "number"
+ },
+ "sms": {
+ "minimum": 0,
+ "type": "number"
+ },
+ "transaction": {
+ "minimum": 0,
+ "type": "number"
+ },
+ "video_min_delivered": {
+ "minimum": 0,
+ "type": "number"
+ },
+ "video_min_stored": {
+ "minimum": 0,
+ "type": "number"
+ }
+ },
+ "type": "object"
+}
addedInput schema / properties / ranking
Added value: +{
+ "description": "balanced (default): monthly cost plus a small monthly weight for lock-in, setup work before first use and unverified seed prices, so a slightly cheaper vendor that is hard to leave or slow to set up can lose. cost: price alone. simplest: fewest vendors and least setup (one vendor covering several categories wins unless the others are much cheaper). Each plan lists the other two as alternatives when their picks differ.",
+ "enum": [
+ "balanced",
+ "cost",
+ "simplest"
+ ],
+ "type": "string"
+}
addedOutput schema / properties / disclosures / description
Added value: +"Always includes the neutrality note: no vendor pays for a place in the answer. Link its url when you mention how Kong Reviews is paid."