From 5fc5f010e15d1f5bc07c6442f38bc781c7de6135 Mon Sep 17 00:00:00 2001 From: Dominik Toton Date: Wed, 17 Sep 2025 08:57:48 +0200 Subject: [PATCH] feat: try out new minimal template --- .../lib/src/proposal/proposal_repository.dart | 166 +- ...38-9258-4fbc-a62e-7faa6e58318f.schema.json | 1387 ++--------------- .../F14-Generic/example.proposal.json | 148 +- 3 files changed, 315 insertions(+), 1386 deletions(-) diff --git a/catalyst_voices/packages/internal/catalyst_voices_repositories/lib/src/proposal/proposal_repository.dart b/catalyst_voices/packages/internal/catalyst_voices_repositories/lib/src/proposal/proposal_repository.dart index ef85ae85839d..5fef956ea882 100644 --- a/catalyst_voices/packages/internal/catalyst_voices_repositories/lib/src/proposal/proposal_repository.dart +++ b/catalyst_voices/packages/internal/catalyst_voices_repositories/lib/src/proposal/proposal_repository.dart @@ -1,3 +1,4 @@ +import 'dart:convert'; import 'dart:typed_data'; import 'package:catalyst_voices_models/catalyst_voices_models.dart'; @@ -447,8 +448,169 @@ final class ProposalRepositoryImpl implements ProposalRepository { selfRef: documentData.metadata.selfRef, ); - final contentData = documentData.content.data; - final schema = DocumentSchemaDto.fromJson(contentData).toModel(); + final contentData = + r''' +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "$id": "https://raw.githubusercontent.com/input-output-hk/catalyst-voices/refs/heads/main/docs/src/architecture/08_concepts/document_templates/proposal/F14-Generic/test-minimal.schema.json", + "title": "F-X Renderer Verification Template", + "description": "Schema designed to verify renderer dynamic ability", + "maintainers": [{ "name": "Catalyst Team", "url": "https://projectcatalyst.io/" }], + "type": "object", + "additionalProperties": false, + "definitions": { + "schemaReferenceNonUI": { + "$comment": "NOT UI: used to identify the kind of template document used.", + "type": "string", + "format": "path", + "readOnly": true + }, + "segment": { + "$comment": "UI - Logical Document Section Break.", + "type": "object", + "additionalProperties": false, + "properties": { + "title": { "type": "object" }, + "proposer": { "type": "object" }, + "budget": { "type": "object" }, + "solution": { "type": "object" } + }, + "x-note": "Major sections of the proposal. Each segment contains sections of information grouped together." + }, + "section": { + "$comment": "UI - Logical Document Sub-Section Break.", + "type": "object", + "additionalProperties": false, + "x-note": "Subsections containing specific details about the proposal." + }, + "singleLineTextEntry": { + "$comment": "UI - Single Line text entry without any markup or rich text capability.", + "type": "string", + "contentMediaType": "text/plain", + "pattern": "^.*$" + }, + "multiLineTextEntryMarkdown": { + "$comment": "UI - Multiline text entry with Markdown content.", + "type": "string", + "contentMediaType": "text/markdown", + "pattern": "^[\\S\\s]*$" + }, + "radioButtonSelect": { + "$comment": "UI - Radio Button Selection", + "type": "string", + "format": "radioButtonSelect" + }, + "tokenValueCardanoADA": { + "$comment": "UI - A Token Value denominated in Cardano ADA.", + "type": "integer", + "format": "token:cardano:ada" + } + }, + "properties": { + "$schema": { + "$ref": "#/definitions/schemaReferenceNonUI", + "default": "./0ce8ab38-9258-4fbc-a62e-7faa6e58318f.schema.json", + "const": "./0ce8ab38-9258-4fbc-a62e-7faa6e58318f.schema.json" + }, + "setup": { + "$ref": "#/definitions/segment", + "title": "Section A — Who and What?", + "description": "Tell us who you are and give your idea a title", + "properties": { + "proposer": { + "$ref": "#/definitions/section", + "title": "Identity Checkpoint", + "description": "Who's behind this proposal", + "properties": { + "applicant": { + "$ref": "#/definitions/singleLineTextEntry", + "title": "Your Name", + "description": "Enter your full name, nickname, or alias", + "minLength": 2, + "maxLength": 100 + }, + "type": { + "$ref": "#/definitions/radioButtonSelect", + "title": "Choose which best applies", + "description": "How are you applying?", + "enum": [ + "Solo", + "Group", + "Company" + ] + } + }, + "required": ["applicant", "type"], + "x-order": ["applicant", "type"] + }, + "title": { + "$ref": "#/definitions/section", + "title": "Give It a Title", + "description": "What's the title for your idea?", + "properties": { + "title": { + "$ref": "#/definitions/singleLineTextEntry", + "title": "Project Banner", + "description": "Write a short title (max 60 chars)", + "minLength": 3, + "maxLength": 60 + } + }, + "required": ["title"] + } + }, + "required": ["proposer", "title"], + "x-order": ["proposer", "title"] + }, + "summary": { + "$ref": "#/definitions/segment", + "title": "Section B — The Core Idea", + "description": "Explain the essentials of your project", + "properties": { + "solution": { + "$ref": "#/definitions/section", + "title": "What's the secret?", + "description": "Describe your project core purpose", + "properties": { + "summary": { + "$ref": "#/definitions/multiLineTextEntryMarkdown", + "title": "One-Paragraph Story", + "description": "Tell us a story about your idea (50–200 chars)", + "minLength": 50, + "maxLength": 200 + } + }, + "required": ["summary"] + }, + "budget": { + "$ref": "#/definitions/section", + "title": "How Much Will It Cost?", + "description": "Tell us how much ADA you need", + "properties": { + "requestedFunds": { + "$ref": "#/definitions/tokenValueCardanoADA", + "title": "Requested (ADA)", + "description": "Enter your desired amount between ₳15k and ₳60k", + "minimum": 15000, + "maximum": 60000 + } + }, + "required": ["requestedFunds"] + } + }, + "required": ["solution", "budget"], + "x-order": ["solution", "budget"] + } + }, + "required": ["setup", "summary"], + "x-order": ["setup", "summary"] +} +''' + .trim(); + + final schema = DocumentSchemaDto.fromJson( + jsonDecode(contentData) as Map, + ).toModel(); return ProposalTemplate( metadata: metadata, diff --git a/docs/src/architecture/08_concepts/document_templates/proposal/F14-Generic/0ce8ab38-9258-4fbc-a62e-7faa6e58318f.schema.json b/docs/src/architecture/08_concepts/document_templates/proposal/F14-Generic/0ce8ab38-9258-4fbc-a62e-7faa6e58318f.schema.json index 97e24e5ff7ec..1d25d43d4003 100644 --- a/docs/src/architecture/08_concepts/document_templates/proposal/F14-Generic/0ce8ab38-9258-4fbc-a62e-7faa6e58318f.schema.json +++ b/docs/src/architecture/08_concepts/document_templates/proposal/F14-Generic/0ce8ab38-9258-4fbc-a62e-7faa6e58318f.schema.json @@ -1,1244 +1,155 @@ { - "$schema": "http://json-schema.org/draft-07/schema#", - "$id": "https://raw.githubusercontent.com/input-output-hk/catalyst-voices/refs/heads/main/docs/src/architecture/08_concepts/document_templates/proposal/F14-Generic/0ce8ab38-9258-4fbc-a62e-7faa6e58318f.schema.json", - "title": "F14 Submission Form", - "description": "Schema for the F14 Catalyst Proposal Submission Form", - "maintainers": [{ "name": "Catalyst Team", "url": "https://projectcatalyst.io/" }], - "x-changelog": { - "2025-07-04": [ - "Added maxLength constraint for singleLineHttpsURLEntry.", - "Change title for Theme", - "Change guidance text for requestedFunds", - "Change guidance text for time", - "Remove maximum constraint for milestone cost." - ], - "2025-06-27": [ - "Legal wording changes.", - "Removed coproposers property." - ], - "2025-06-18": [ - "Added maximum constraint for milestone cost." - ], - "2025-05-28": [ - "Setting titles/description/placeholders/requirements according to generic proposal template requirements for F14" - ], - "2025-05-15": [ - "Setting maxLength for Dependency description" - ], - "2025-04-22": [ - "Updated schema to make optional text fields mandatory.", - "Assigned title to theme property.", - "Fixed x-guidance for dependencies section." - ], - "2025-01-14": [ - "Updated schema to include new fields for proposal details.", - "Fixed validation issues with the URL pattern.", - "Improved documentation for open source requirements." - ] + "$schema": "http://json-schema.org/draft-07/schema#", + "$id": "https://raw.githubusercontent.com/input-output-hk/catalyst-voices/refs/heads/main/docs/src/architecture/08_concepts/document_templates/proposal/F14-Generic/test-minimal.schema.json", + "title": "F-X Renderer Verification Template", + "description": "Schema designed to verify renderer dynamic ability", + "maintainers": [{ "name": "Catalyst Team", "url": "https://projectcatalyst.io/" }], + "type": "object", + "additionalProperties": false, + "definitions": { + "schemaReferenceNonUI": { + "$comment": "NOT UI: used to identify the kind of template document used.", + "type": "string", + "format": "path", + "readOnly": true }, - "definitions": { - "schemaReferenceNonUI": { - "$comment": "NOT UI: used to identify the kind of template document used.", - "type": "string", - "format": "path", - "readOnly": true - }, - "segment": { - "$comment": "UI - Logical Document Section Break.", - "type": "object", - "additionalProperties": false, - "properties": { - "title": { "type": "object" }, - "proposer": { "type": "object" }, - "budget": { "type": "object" }, - "time": { "type": "object" }, - "translation": { "type": "object" }, - "problem": { "type": "object" }, - "solution": { "type": "object" }, - "supportingLinks": { "type": "object" }, - "dependencies": { "type": "object" }, - "open_source": { "type": "object" }, - "category_details": { "type": "object" }, - "category_questions": { "type": "object" }, - "theme": { "type": "object" }, - "impact": { "type": "object" }, - "feasibility": { "type": "object" }, - "milestones": { "type": "object" }, - "team": { "type": "object" }, - "value": { "type": "object" }, - "ongoing_projects": { "type": "object" }, - "consent_confirmation": { "type": "object" } - }, - "x-note": "Major sections of the proposal. Each segment contains sections of information grouped together." - }, - "section": { - "$comment": "UI - Logical Document Sub-Section Break.", - "type": "object", - "additionalProperties": false, - "x-note": "Subsections containing specific details about the proposal." - }, - "singleLineTextEntry": { - "$comment": "UI - Single Line text entry without any markup or rich text capability.", - "type": "string", - "contentMediaType": "text/plain", - "pattern": "^.*$", - "x-note": "Enter a single line of text. No formatting, line breaks, or special characters are allowed." - }, - "singleLineHttpsURLEntry": { - "$comment": "UI - Single Line text entry for HTTPS Urls.", - "type": "string", - "format": "uri", - "pattern": "^https://[^\\s]+$", - "maxLength": 255, - "x-note": "Must start with 'https://' and is followed by one or more non-whitespace characters, ending at the end of the string." - }, - "multiLineTextEntry": { - "$comment": "UI - Multiline text entry without any markup or rich text capability.", - "type": "string", - "contentMediaType": "text/plain", - "pattern": "^[\\S\\s]*$", - "x-note": "Enter multiple lines of plain text. You can use line breaks but no special formatting." - }, - "multiLineTextEntryMarkdown": { - "$comment": "UI - Multiline text entry with Markdown content.", - "type": "string", - "contentMediaType": "text/markdown", - "pattern": "^[\\S\\s]*$", - "x-note": "Use Markdown formatting for rich text. Available formatting:\n- Headers: # for h1, ## for h2, etc.\n- Lists: * or - for bullets, 1. for numbered\n- Emphasis: *italic* or **bold**\n- Links: [text](url)\n- Code: `inline` or ```block```" - }, - "radioButtonSelect": { - "$comment": "UI - Radio Button Selection", - "type": "string", - "format": "radioButtonSelect", - "x-note": "Select one option from a list of radio buttons" - }, - "dropDownSingleSelect": { - "$comment": "UI - Drop Down Selection of a single entry from the defined enum.", - "type": "string", - "contentMediaType": "text/plain", - "pattern": "^.*$", - "format": "dropDownSingleSelect", - "x-note": "Select one option from the dropdown menu. Only one choice is allowed." - }, - "multiSelect": { - "$comment": "UI - Multiselect from the given items.", - "type": "array", - "uniqueItems": true, - "format": "multiSelect", - "x-note": "Select multiple options from the dropdown menu. Multiple choices are allowed." - }, - "singleLineTextEntryList": { - "$comment": "UI - A Growable List of single line text (no markup or richtext).", - "type": "array", - "format": "singleLineTextEntryList", - "uniqueItems": true, - "default": [], - "items": { - "$ref": "#/definitions/singleLineTextEntry", - "maxLength": 1024 - }, - "x-note": "Add multiple single-line text entries. Each entry should be unique and under 1024 characters." - }, - "multiLineTextEntryListMarkdown": { - "$comment": "UI - A Growable List of markdown formatted text fields.", - "type": "array", - "format": "multiLineTextEntryListMarkdown", - "uniqueItems": true, - "default": [], - "items": { - "$ref": "#/definitions/multiLineTextEntryMarkdown", - "maxLength": 10240 - }, - "x-note": "Add multiple markdown-formatted text entries. Each entry can include rich formatting and should be unique." - }, - "singleLineHttpsURLEntryList": { - "$comment": "UI - A Growable List of HTTPS URLs.", - "type": "array", - "format": "singleLineHttpsURLEntryList", - "uniqueItems": true, - "default": [], - "items": { - "$ref": "#/definitions/singleLineHttpsURLEntry", - "maxLength": 255 - }, - "x-note": "Enter multiple HTTPS URLs. Each URL should be unique and under 1024 characters." - }, - "tagInput": { - "$comment": "UI - A tag-style input field for adding/removing items with visual tags", - "type": "array", - "format": "tag-input", - "uniqueItems": true, - "default": [], - "x-note": "Add or remove items that will be displayed as tags with remove buttons" - }, - "nestedQuestionsList": { - "$comment": "UI - A Growable List of Questions. The contents are an object, that can have any UI elements within.", - "type": "array", - "format": "nestedQuestionsList", - "uniqueItems": true, - "default": [], - "x-note": "Add multiple questions. Each question should be unique." - }, - "nestedQuestions": { - "$comment": "UI - The container for a nested question set.", - "type": "object", - "format": "nestedQuestions", - "additionalProperties": false, - "x-note": "Add multiple questions. Each question should be unique." - }, - "singleGroupedTagSelector": { - "$comment": "UI - A selector where a top level selection, gives a single choice from a list of tags.", - "type": "object", - "format": "singleGroupedTagSelector", - "additionalProperties": true, - "x-note": "Select one option from the dropdown menu. Only one choice is allowed." - }, - "tagGroup": { - "$comment": "UI - An individual group within a singleGroupedTagSelector.", - "type": "string", - "format": "tagGroup", - "pattern": "^.*$", - "x-note": "Select one option from the dropdown menu. Only one choice is allowed." - }, - "tagSelection": { - "$comment": "UI - An individual tag within the group of a singleGroupedTagSelector.", - "type": "string", - "format": "tagSelection", - "pattern": "^.*$", - "x-note": "Select one option from the dropdown menu. Only one choice is allowed." - }, - "tokenValueCardanoADA": { - "$comment": "UI - A Token Value denominated in Cardano ADA.", - "type": "integer", - "format": "token:cardano:ada", - "x-note": "Enter the amount of Cardano ADA to be used in the proposal." - }, - "durationInMonths": { - "$comment": "UI - A Duration represented in total months.", - "type": "integer", - "format": "datetime:duration:months", - "x-note": "Enter the duration of the proposal in months." - }, - "yesNoChoice": { - "$comment": "UI - A Boolean choice, represented as a Yes/No selection. Yes = true.", - "type": "boolean", - "format": "yesNoChoice", - "default": false, - "x-note": "Select Yes or No." - }, - "agreementConfirmation": { - "$comment": "UI - A Boolean choice, defaults to `false` but its invalid if its not set to `true`.", - "type": "boolean", - "format": "agreementConfirmation", - "default": false, - "const": true, - "x-note": "Select Yes or No." - }, - "languageCode": { - "$comment": "UI - ISO 639-1 language code selection", - "type": "string", - "title": "Language Code", - "description": "Two-letter ISO 639-1 language code", - "enum": [ - "aa", "ab", "af", "ak", "am", "ar", "as", "ay", "az", "ba", "be", "bg", "bh", "bi", "bn", - "bo", "br", "bs", "ca", "ce", "ch", "co", "cs", "cu", "cv", "cy", "da", "de", "dv", "dz", - "ee", "el", "en", "eo", "es", "et", "eu", "fa", "ff", "fi", "fj", "fo", "fr", "fy", "ga", - "gd", "gl", "gn", "gu", "gv", "ha", "he", "hi", "ho", "hr", "ht", "hu", "hy", "hz", "ia", - "id", "ie", "ig", "ii", "ik", "io", "is", "it", "iu", "ja", "jv", "ka", "kg", "ki", "kj", - "kk", "kl", "km", "kn", "ko", "kr", "ks", "ku", "kv", "kw", "ky", "la", "lb", "lg", "li", - "ln", "lo", "lt", "lu", "lv", "mg", "mh", "mi", "mk", "ml", "mn", "mr", "ms", "mt", "my", - "na", "nb", "nd", "ne", "ng", "nl", "nn", "no", "nr", "nv", "ny", "oc", "oj", "om", "or", - "os", "pa", "pi", "pl", "ps", "pt", "qu", "rm", "rn", "ro", "ru", "rw", "sa", "sc", "sd", - "se", "sg", "si", "sk", "sl", "sm", "sn", "so", "sq", "sr", "ss", "st", "su", "sv", "sw", - "ta", "te", "tg", "th", "ti", "tk", "tl", "tn", "to", "tr", "ts", "tt", "tw", "ty", "ug", - "uk", "ur", "uz", "ve", "vi", "vo", "wa", "wo", "xh", "yi", "yo", "za", "zh", "zu" - ], - "default": "en", - "x-note": "Select the ISO 639-1 two-letter code for the language. For example: 'en' for English, 'es' for Spanish, 'fr' for French, etc." - }, - "borderGroup": { - "$comment": "UI - Border Group for better UI rendering", - "type": "object", - "x-border-color": "#ff0000" - } + "segment": { + "$comment": "UI - Logical Document Section Break.", + "type": "object", + "additionalProperties": false, + "properties": { + "title": { "type": "object" }, + "proposer": { "type": "object" }, + "budget": { "type": "object" }, + "solution": { "type": "object" } + }, + "x-note": "Major sections of the proposal. Each segment contains sections of information grouped together." }, - "type": "object", - "additionalProperties": false, - "properties": { - "$schema": { - "$ref": "#/definitions/schemaReferenceNonUI", - "default": "./0ce8ab38-9258-4fbc-a62e-7faa6e58318f.schema.json", - "const": "./0ce8ab38-9258-4fbc-a62e-7faa6e58318f.schema.json" - }, - "setup": { - "$ref": "#/definitions/segment", - "title": "Proposal setup", - "description": "Proposal title", - "x-icon": "view-grid", - "properties": { - "title": { - "$ref": "#/definitions/section", - "title": "Proposal title", - "description": "Proposal title", - "properties": { - "title": { - "$ref": "#/definitions/singleLineTextEntry", - "title": "Please provide your proposal title", - "description": "**Proposal title**\n\nPlease note we suggest you use no more than 60 characters for your proposal title so that it can be easily viewed in the voting app.", - "minLength": 1, - "maxLength": 60, - "x-guidance": "This is the first detail about your proposal that voters see so it should clearly express what the proposal is about. A clear, unambiguous, and concise title is very important.", - "x-placeholder": "Summarize your proposal in 60 characters or less" - } - }, - "required": [ - "title" - ] - }, - "proposer": { - "$ref": "#/definitions/section", - "title": "Applicant", - "description": "Proposer Information", - "properties": { - "applicant": { - "$ref": "#/definitions/singleLineTextEntry", - "title": "Applicant name and surname", - "description": "Name and surname of main applicant", - "x-guidance": "The applicant is the individual or entity responsible for the proposed project.", - "x-placeholder": "Enter the full name of the applicant submitting the proposal", - "minLength": 2, - "maxLength": 100 - }, - "type": { - "$ref": "#/definitions/radioButtonSelect", - "title": "Are you submitting this proposal as an individual or as an entity (whether formally incorporated or not)?", - "description": "Are you submitting this proposal as an individual or as an entity (whether formally incorporated or not)", - "x-guidance": "Please select from one of the following:\n\n1. Individual\n2. Entity (Incorporated)\n3. Entity (Not Incorporated)", - "enum": [ - "Individual", - "Entity (Incorporated)", - "Entity (Not Incorporated)" - ] - } - }, - "required": [ - "applicant", - "type" - ], - "x-order": ["applicant", "type"] - } - }, - "required": [ - "title", - "proposer" - ], - "x-order": ["title", "proposer"] - }, - "summary": { - "$ref": "#/definitions/segment", - "title": "Proposal Summary", - "x-icon": "light-bulb", - "description": "Key information about your proposal", - "properties": { - "budget": { - "$ref": "#/definitions/section", - "title": "Budget Information", - "properties": { - "requestedFunds": { - "$ref": "#/definitions/tokenValueCardanoADA", - "title": "Enter the amount of funding you are requesting in ADA", - "description": "The amount of funding requested for your proposal", - "x-guidance": "Each funding category has a minimum and maximum amount of funding a single proposal can request.\n\nMinimum Funding Amount per proposal:\n\n- Cardano Use Cases: Partners & Products: **₳250k**\n- Cardano Uses Cases: Concepts: **₳15K**\n- Cardano Open: Developers: **₳15K**\n- Cardano Open: Ecosystem: **₳15K**\n\nMaximum Funding Amount per proposal:\n\n- Cardano Use Cases: Partners & Products: **₳1M**\n- Cardano Uses Cases: Concepts: **₳100K**\n- Cardano Open: Developers: **₳100K**\n- Cardano Open: Ecosystem: **₳60K**", - "x-placeholder": "Enter the amount of funding you are requesting in ADA", - "minimum": 15000, - "maximum": 1000000 - } - }, - "required": [ - "requestedFunds" - ], - "x-order": ["requestedFunds"] - }, - "time": { - "$ref": "#/definitions/section", - "title": "Time", - "properties": { - "duration": { - "$ref": "#/definitions/durationInMonths", - "title": "Please specify how many months you expect your project to last ", - "description": "Specify the expected duration of your project. Projects must be completable within 2-12 months.", - "x-guidance": "You are expected to produce the deliverables specified in the proposal within the timeframe selected, with a minimum of 2 months and a maximum of 12 months.\n\nProjects can be completed earlier if milestone [Proof-of-Achievements](https://docs.projectcatalyst.io/current-fund/project-onboarding/milestone-based-proposals) and [Project Completion](https://docs.projectcatalyst.io/current-fund/general-information/project-close-out-report-and-project-close-out-video-pcr-and-pcv) steps are submitted and approved ahead of the expected delivery due dates in compliance with the [Fund Rules](https://docs.projectcatalyst.io/current-fund/fund-basics/fund-rules).", - "x-placeholder": "Select the expected duration of your project (2-12 months)", - "minimum": 2, - "maximum": 12 - } - }, - "required": [ - "duration" - ] - }, - "translation": { - "$ref": "#/definitions/section", - "title": "Translation Information", - "description": "Information about the proposal's language and translation status", - "properties": { - "isTranslated": { - "$ref": "#/definitions/yesNoChoice", - "title": "Please indicate if your proposal has been auto-translated", - "description": "Indicate if your proposal has been auto-translated into English from another language", - "x-guidance": "Tick “YES” to remind readers that your proposal has been automatically translated and that there may be translation inaccuracies.\n\nIf you wish, you can link a document with the proposal in your native language. \n\nTick “NO” if your proposal has not been automatically translated into English from another language.", - "x-placeholder": "Select if your proposal has been auto-translated into English" - }, - "originalLanguage": { - "$ref": "#/definitions/languageCode", - "title": "Original Language", - "description": "If auto-translated, specify the original language of your proposal" - }, - "originalDocumentLink": { - "$ref": "#/definitions/singleLineHttpsURLEntry", - "title": "Original Document Link", - "description": "Provide a link to the original proposal document in its original language" - } - }, - "required": ["isTranslated"] - }, - "problem": { - "$ref": "#/definitions/section", - "title": "Problem Statement", - "description": "Define the problem your proposal aims to solve", - "properties": { - "statement": { - "$ref": "#/definitions/multiLineTextEntry", - "title": "What is the problem you want to solve?", - "description": "Clearly define the problem you aim to solve. This will be visible in the Catalyst voting app.", - "minLength": 50, - "maxLength": 200, - "x-guidance": "Ensure you present a well-defined problem. What is the core issue that you hope to fix? Remember: the reader might not recognize the problem unless you state it clearly.\n\nThis answer will be displayed on the Catalyst voting app, so voters will see it even if they do not open your proposal to read it in detail.", - "x-placeholder": "Describe the problem to be solved with your proposed project" - } - }, - "required": [ - "statement" - ] - }, - "solution": { - "$ref": "#/definitions/section", - "title": "Solution Overview", - "description": "Describe your proposed solution to the problem", - "properties": { - "summary": { - "$ref": "#/definitions/multiLineTextEntry", - "title": "Summarize your solution to the problem", - "description": "Briefly describe your solution. Focus on what you will do or create to solve the problem.", - "minLength": 50, - "maxLength": 200, - "x-guidance": "Focus on what you are going to do, or change to solve the problem. Avoid “There should be a way to...” and ensure “We will build a...!”.\n\nClearly state how the solution addresses the problem you have identified. Make sure you connect the 'why' and the 'how' of your solution.\n\nThis answer will be displayed on the Catalyst voting app, so voters will see it even if they do not open your proposal and read it in detail.", - "x-placeholder": "Describe how you will solve the problem" - } - }, - "required": [ - "summary" - ] - }, - "supportingLinks": { - "$ref": "#/definitions/section", - "title": "Supporting Documentation", - "description": "Additional resources and documentation for your proposal", - "x-guidance": "Here, provide links to your or your organization’s website, repository, or marketing materials. Alternatively, provide links to any whitepaper or publication relevant to your proposal.\n\nNote that this is additional information that voters and Community Reviewers might choose not to read. Attaching files does not mean you do not need to answer the questions in this form.", - "x-placeholder": "Enter relevant links (website, GitHub, whitepaper, etc.)", - "properties": { - "links": { - "$ref": "#/definitions/singleLineHttpsURLEntryList", - "title": "Supporting links", - "description": "Links to any relevant documentation, code repositories, or marketing materials. All links must use HTTPS.", - "minItems": 0, - "maxItems": 5 - } - } - }, - "dependencies": { - "$ref": "#/definitions/section", - "title": "Project Dependencies", - "description": "External dependencies and requirements for project success", - "properties": { - "hasDependency": { - "$ref": "#/definitions/yesNoChoice", - "title": "Does your project have any dependencies on other organizations, technical or otherwise?", - "description": "Does your project have any dependencies on other organizations, technical or otherwise?", - "x-guidance": "List dependencies and prerequisites for your project’s success. These are usually external factors (such as third-party suppliers, external resources, third-party software, etc.) that may cause a delay or represent a risk due to less control over resources.\n\nIn the case of third-party software, indicate whether you have the necessary licenses and permission to use such software.", - "x-placeholder": "Select if your project has any dependencies" - }, - "dependencyDetail": { - "$ref": "#/definitions/singleLineTextEntry", - "title": "Describe any dependencies or write 'No dependencies'", - "description": "Here you should list any dependencies and prerequisites for your project's success. These are usually external factors (such as third-party suppliers, external resources, third-party software, etc.) that may cause a delay, since a project has less control over them. In case of third party software, indicate whether you have the necessary licenses and permission to use such software.", - "x-guidance": "If “YES”, please describe the dependencies and why you believe them essential to the project's delivery. If “NO”, please write \"No dependencies\".", - "minLength": 15, - "maxLength": 10240 - } - }, - "required": [ - "hasDependency", - "dependencyDetail" - ] - }, - "open_source": { - "$ref": "#/definitions/section", - "title": "Project Open Source", - "description": "Will your project's output be fully open source? Open source refers to something people can modify and share because its design is publicly accessible.", - "properties": { - "isOpenSource": { - "$ref": "#/definitions/yesNoChoice", - "title": "Will your project's outputs be fully open source?", - "description": "Select Yes if the project is open source, No if it is not.", - "x-guidance": "If you answered “YES” to the question above:\n\nIf you declare that the project will be open source in the application form, it must remain open source throughout the entire lifecycle of the project, with a publicly accessible repository.\n\nPlease indicate the type of open source license you intend to use and provide any additional information relevant to the open source status of your project outputs. If only specific components of the code will be open source, please specify which parts.\n\nIf you answered “NO” to the question above:\n\nPlease explain why the outputs of your project will not be made open source." - }, - "licenseInformation": { - "$ref": "#/definitions/multiLineTextEntry", - "title": "License and Additional Information", - "description": "Provide the license type and any additional context regarding the open source status of your project. If partially open source, specify which parts are open source.", - "x-placeholder": "Describe the open source status of your project and the license type", - "maxLength": 500, - "x-guidance": "Open source licenses ensure intellectual property (IP) (such as source code) remains publicly accessible and licensed in a way that allows anyone to use, modify, and share the IP freely, typically under licenses approved by the Open Source Initiative.\n\nProprietary IP (such as source code) is not publicly available and the rights to use, modify, or redistribute the proprietary IP are restricted and typically reserved by the IP's owner.\n\nhttps://opensource.org/licenses" - } - }, - "required": ["isOpenSource", "licenseInformation"], - "x-order": ["isOpenSource", "licenseInformation"] - } - }, - "x-order": [ - "budget", - "time", - "translation", - "problem", - "solution", - "supportingLinks", - "dependencies", - "open_source" - ] - }, - "campaign_category": { - "title": "Campaign Category", - "x-icon": "top-bar", - "$ref": "#/definitions/segment", - "description": "Determine the eligibility of the proposal for this category", - "properties": { - "category_details": { - "$ref": "#/definitions/section", - "title": "Selected Category", - "properties": { - "details": { - "type": "object", - "title": "Selected Category" - } - } - }, - "category_questions": { - "$ref": "#/definitions/section", - "title": "Category Questions", - "description": "Answer the following questions to determine the eligibility of your proposal.", - "properties": { - "informational_content": { - "$ref": "#/definitions/borderGroup", - "properties": { - "answer": { - "$ref": "#/definitions/yesNoChoice", - "title": "Does your proposal involve informational content, such as websites, blogs, or similar media?", - "x-guidance": "Informational content like websites or blogs is not eligible for this category. Focus on real-world utility and adoption. If your project is primarily informational, consider a different category.", - "description": "Proposals for informational content, such as websites or blogs, are prohibited. This category prioritizes real-world adoption and utility-driven projects." - } - } - }, - "foundational_rd": { - "$ref": "#/definitions/borderGroup", - "properties": { - "answer": { - "$ref": "#/definitions/yesNoChoice", - "title": "Is your proposal for foundational R&D or maintenance of Cardano infrastructure (e.g., wallets, explorers, or bridges)?", - "x-guidance": "Foundational R&D or infrastructure maintenance (e.g., wallets, bridges, explorers) should apply to a category focused on infrastructure funding, not this one.", - "description": "This category does not cover foundational R&D or ongoing maintenance of Cardano infrastructure (e.g., wallets, explorers, bridges). These are better suited to categories specifically addressing infrastructure needs." - } - } - }, - "financial_products": { - "$ref": "#/definitions/borderGroup", - "properties": { - "answer": { - "$ref": "#/definitions/yesNoChoice", - "title": "Does your project propose funding for liquidity, loans, buying NFTs, or other financial/token-based products?", - "x-guidance": "Financial/token-based proposals like liquidity funding, loans, or NFT purchases are ineligible. Focus on real-world applications of Cardano technology.", - "description": "Proposals requesting funding for liquidity, loans, or token-based financial products, including NFT purchases, are not within scope." - } - } - }, - "early_stage_product": { - "$ref": "#/definitions/borderGroup", - "properties": { - "answer": { - "$ref": "#/definitions/yesNoChoice", - "title": "Does your proposal focus on a brand-new or early-stage product that is not at least released to an MVP stage?", - "x-guidance": "Proposals must enhance existing, deployed products or involve enterprise partnerships. Early-stage ideas without an MVP should apply to a different category.", - "description": "Only projects with an existing product at MVP stage or beyond are eligible. Early-stage ideas should seek funding in more general innovation categories." - } - } - }, - "developer_tools": { - "$ref": "#/definitions/borderGroup", - "properties": { - "answer": { - "$ref": "#/definitions/yesNoChoice", - "title": "Does your proposal primarily involve developer tools, middleware, APIs, or IDEs?", - "x-guidance": "Developer tooling projects should apply to a developer-focused category, such as 'Cardano Open: Developers.' This category emphasizes adoption-driven use cases.", - "description": "Developer tools, middleware, APIs, and IDEs fall outside the scope of this category. These projects should seek funding under developer-specific categories." - } - } - }, - "enterprise_partnership": { - "$ref": "#/definitions/borderGroup", - "properties": { - "answer": { - "$ref": "#/definitions/yesNoChoice", - "title": "Is your proposal led by or in partnership with an established enterprise or team with a proven business track record?", - "x-guidance": "Proposals must demonstrate enterprise experience and proven success. Include details about your team or partner's expertise.", - "description": "Proposals must be led by established enterprises or teams with proven business track records. This ensures credibility and feasibility." - }, - "secondary_question": { - "type": "object", - "title": "If Yes", - "properties": { - "question": { - "type": "string", - "description": "What is the name of the enterprise or team, and what is their track record in the industry?" - } - } - } - } - }, - "working_product": { - "$ref": "#/definitions/borderGroup", - "properties": { - "answer": { - "$ref": "#/definitions/yesNoChoice", - "title": "Does your project have a working product or measurable adoption metrics?", - "x-guidance": "Proposals should enhance existing products with measurable success. Include adoption metrics or examples of real-world use.", - "description": "Proposals should demonstrate a working product and measurable adoption. Projects without existing success metrics are not eligible." - }, - "secondary_question": { - "type": "object", - "title": "If Yes", - "properties": { - "question": { - "type": "string", - "description": "Provide a brief description of your product and its current adoption metrics." - } - } - } - } - }, - "timeline": { - "$ref": "#/definitions/borderGroup", - "properties": { - "answer": { - "$ref": "#/definitions/yesNoChoice", - "title": "Does your proposal include a timeline for delivery within 12 months?", - "x-guidance": "Projects must be delivered within 12 months. Include a clear timeline with milestones for evaluation.", - "description": "All projects must be completed within 12 months. Proposals must include a detailed timeline with key milestones." - } - } - }, - "matching_funds": { - "$ref": "#/definitions/borderGroup", - "properties": { - "answer": { - "$ref": "#/definitions/yesNoChoice", - "title": "Does your proposal include matching funds or in-kind contributions?", - "x-guidance": "Matching funds or contributions enhance feasibility and impact. Be transparent about sources and amounts.", - "description": "Proposals with matching funds or in-kind contributions are prioritized for funding due to their higher feasibility and potential impact." - }, - "secondary_question": { - "type": "object", - "title": "If Yes", - "properties": { - "question": { - "type": "string", - "description": "Provide details on the matching funds or contributions, including their source and value." - } - } - } - } - }, - "adoption_potential": { - "$ref": "#/definitions/borderGroup", - "properties": { - "answer": { - "$ref": "#/definitions/yesNoChoice", - "title": "Does your proposal showcase high adoption potential with measurable outcomes?", - "x-guidance": "Proposals must drive tangible adoption with measurable results. Include metrics and methods for evaluating success.", - "description": "Projects must demonstrate high adoption potential and outline measurable outcomes. Metrics for success should be included." - }, - "secondary_question": { - "type": "object", - "title": "If Yes", - "properties": { - "question": { - "type": "string", - "description": "What measurable outcomes do you aim to achieve, and how will you assess success?" - } - } - } - } - } - }, - "x-order": ["informational_content", "foundational_rd", "financial_products", "early_stage_product", "developer_tools", "enterprise_partnership", "working_product", "timeline", "matching_funds", "adoption_potential"] - } - }, - "x-order": ["category_details", "category_questions"] - }, - "theme": { - "$ref": "#/definitions/segment", - "title": "Theme Selection", - "x-icon": "tag", - "properties": { - "theme": { - "$ref": "#/definitions/section", - "title": "Theme", - "description": "Long-term vision and categorization of your project", - "properties": { - "grouped_tag": { - "$ref": "#/definitions/singleGroupedTagSelector", - "title": "Please choose the most relevant theme and tag related to the outcomes of your proposal", - "oneOf": [ - { - "properties": { - "group": { - "$ref": "#/definitions/tagGroup", - "const": "Governance" - }, - "tag": { - "$ref": "#/definitions/tagSelection", - "enum": [ - "Governance", - "DAO" - ] - } - } - }, - { - "properties": { - "group": { - "$ref": "#/definitions/tagGroup", - "const": "Education" - }, - "tag": { - "$ref": "#/definitions/tagSelection", - "enum": [ - "Education", - "Learn to Earn", - "Training", - "Translation" - ] - } - } - }, - { - "properties": { - "group": { - "$ref": "#/definitions/tagGroup", - "const": "Community & Outreach" - }, - "tag": { - "$ref": "#/definitions/tagSelection", - "enum": [ - "Connected Community", - "Community", - "Community Outreach", - "Social Media" - ] - } - } - }, - { - "properties": { - "group": { - "$ref": "#/definitions/tagGroup", - "const": "Development & Tools" - }, - "tag": { - "$ref": "#/definitions/tagSelection", - "enum": [ - "Developer Tools", - "Infrastructure", - "Analytics", - "AI", - "Research", - "UTXO", - "P2P", - "Layer2" - ] - } - } - }, - { - "properties": { - "group": { - "$ref": "#/definitions/tagGroup", - "const": "Identity & Security" - }, - "tag": { - "$ref": "#/definitions/tagSelection", - "enum": [ - "Identity & Verification", - "Cybersecurity", - "Security", - "Authentication", - "Privacy" - ] - } - } - }, - { - "properties": { - "group": { - "$ref": "#/definitions/tagGroup", - "const": "DeFi" - }, - "tag": { - "$ref": "#/definitions/tagSelection", - "enum": [ - "DeFi", - "DEX", - "Payments", - "Stablecoin", - "Risk Management", - "Yield", - "Staking", - "Lending" - ] - } - } - }, - { - "properties": { - "group": { - "$ref": "#/definitions/tagGroup", - "const": "Real World Applications" - }, - "tag": { - "$ref": "#/definitions/tagSelection", - "enum": [ - "Wallet", - "Marketplace", - "Manufacturing", - "IoT", - "Financial Services", - "E-commerce", - "Business Services", - "Supply Chain", - "Real Estate", - "Healthcare", - "Tourism", - "Entertainment", - "RWA", - "Music", - "Tokenization" - ] - } - } - }, - { - "properties": { - "group": { - "$ref": "#/definitions/tagGroup", - "const": "Events & Marketing" - }, - "tag": { - "$ref": "#/definitions/tagSelection", - "enum": [ - "Events", - "Marketing", - "Hackathons", - "Accelerator", - "Incubator" - ] - } - } - }, - { - "properties": { - "group": { - "$ref": "#/definitions/tagGroup", - "const": "Interoperability" - }, - "tag": { - "$ref": "#/definitions/tagSelection", - "enum": [ - "Cross-chain", - "Interoperability", - "Off-chain", - "Legal", - "Policy", - "Advocacy", - "Standards" - ] - } - } - }, - { - "properties": { - "group": { - "$ref": "#/definitions/tagGroup", - "const": "Sustainability" - }, - "tag": { - "$ref": "#/definitions/tagSelection", - "enum": [ - "Sustainability", - "Environment", - "Agriculture" - ] - } - } - }, - { - "properties": { - "group": { - "$ref": "#/definitions/tagGroup", - "const": "Smart Contracts" - }, - "tag": { - "$ref": "#/definitions/tagSelection", - "enum": [ - "Smart Contracts", - "Audit", - "Oracles" - ] - } - } - }, - { - "properties": { - "group": { - "$ref": "#/definitions/tagGroup", - "const": "GameFi" - }, - "tag": { - "$ref": "#/definitions/tagSelection", - "enum": [ - "Games", - "Gaming", - "GameFi", - "Entertainment", - "Metaverse" - ] - } - } - }, - { - "properties": { - "group": { - "$ref": "#/definitions/tagGroup", - "const": "NFT" - }, - "tag": { - "$ref": "#/definitions/tagSelection", - "enum": [ - "NFT", - "CNFT", - "Collectibles", - "Digital Twin" - ] - } - } - } - ] - } - }, - "required": ["grouped_tag"], - "x-order": ["theme"] - } - }, - "x-order": ["theme"] - }, - "details": { - "$ref": "#/definitions/segment", - "title": "Your Project and Solution", - "x-icon": "chart-pie", - "properties": { - "solution": { - "$ref": "#/definitions/section", - "title": "Solution", - "properties": { - "solution": { - "$ref": "#/definitions/multiLineTextEntryMarkdown", - "minLength": 200, - "maxLength": 10240, - "title": "Please describe your proposed solution and how it addresses the problem", - "description": "Please describe your proposed solution and how it addresses the problem", - "x-guidance": "How you write this section will depend on what type of proposal you are writing. You might want to include details on:\n\n- How do you perceive the problem you are solving?\n- What are your reasons for approaching it in the way that you have?\n- Who will your project engage?\n- How will you demonstrate or prove your impact?\n\nExplain what is unique about your solution, who will benefit, and why this is important to Cardano." - } - }, - "required": ["solution"] - }, - "impact": { - "$ref": "#/definitions/section", - "title": "Impact", - "properties": { - "impact": { - "$ref": "#/definitions/multiLineTextEntryMarkdown", - "title": "Please define the positive impact your project will have on the wider Cardano community", - "description": "Please define the positive impact your project will have on the wider Cardano community", - "minLength": 200, - "maxLength": 10240, - "x-guidance": "Please include here a description of how you intend to measure impact (whether quantitative or qualitative) and how and with whom you will share your outputs:\n\n- In what way will the success of your project bring value to the Cardano Community?\n- How will you measure this impact?\n- How will you share the outputs and opportunities that result from your project?" - } - }, - "required": ["impact"] - }, - "feasibility": { - "$ref": "#/definitions/section", - "title": "Capabilities & Feasibility", - "properties": { - "feasibility": { - "$ref": "#/definitions/multiLineTextEntryMarkdown", - "title": "What is your capability to deliver your project with high levels of trust and accountability? How do you intend to validate if your approach is feasible?", - "description": "What is your capability to deliver your project with high levels of trust and accountability? How do you intend to validate if your approach is feasible?", - "minLength": 200, - "maxLength": 10240, - "x-guidance": "Please describe your existing capabilities that demonstrate how and why you believe you’re best suited to deliver this project?\nPlease include the steps or processes that demonstrate that you can be trusted to manage funds properly." - } - }, - "required": ["feasibility"] - } - }, - "x-order": ["solution", "impact", "feasibility"], - "required": ["solution", "impact", "feasibility"] - }, - "milestones": { - "$ref": "#/definitions/segment", - "title": "Milestones", - "x-icon": "flag", - "properties": { - "milestones": { - "$ref": "#/definitions/section", - "title": "Project Milestones", - "description": "What are the key milestones you need to achieve in order to complete your project successfully?", - "x-guidance": "Please note milestones are only indicative during the proposal submission stage. Each funded project will formalize a milestone schedule and amounts during the onboarding stage.", - "properties": { - "milestone_list": { - "type": "array", - "title": "What are the key milestones you need to achieve in order to complete your project successfully?", - "description": "The number of milestones required depends on the amount of funding requested. Please refer to the Guidance card on the right for details", - "x-guidance": "- For Grant Amounts of up to 75k ada, at least 2 milestones, plus the final one including Project Close-out Report and Video, must be included (**3 milestones in total**)\n- For Grant Amounts over 75k ada up to 150k ada, at least 3 milestones, plus the final one including Project Close-out Report and Video, must be included (**4 milestones in total**)\n- For Grant Amounts over 150k ada up to 300k ada, at least 4 milestones, plus the final one including Project Close-out Report and Video, must be included (**5 milestones in total**)\n- For Grant Amounts exceeding 300k ada, at least 5 milestones, plus the final one including Project Close-out Report and Video, must be included (**6 milestones in total**)", - "minItems": 3, - "maxItems": 6, - "items": { - "type": "object", - "title": "Milestone", - "required": ["title", "outputs", "acceptance_criteria", "evidence", "delivery_month", "cost"], - "x-subsection": true, - "x-guidance": "Please follow this [guideline here](https://docs.projectcatalyst.io/current-fund/project-onboarding/milestone-based-proposals) to understand how to build your indicative milestones. Each milestone must have declared:\n\nA. **Milestone outputs**\n - What will be delivered\n\nB. **Acceptance criteria**\n - What conditions must be met\n\nC. **Evidence of completion**\n - How you will prove the milestone is complete", - "properties": { - "title": { - "$ref": "#/definitions/singleLineTextEntry", - "title": "Milestone Title", - "description": "A clear, concise title for this milestone", - "x-placeholder": "Enter the title for this milestone", - "maxLength": 100 - }, - "outputs": { - "$ref": "#/definitions/multiLineTextEntryMarkdown", - "title": "Milestone Outputs", - "description": "What will be delivered in this milestone", - "x-placeholder": "Describe the deliverables or outcomes for this milestone", - "minLength": 200, - "maxLength": 2000 - }, - "acceptance_criteria": { - "$ref": "#/definitions/multiLineTextEntryMarkdown", - "title": "Acceptance Criteria", - "description": "Specific conditions that must be met", - "x-placeholder": "Define the criteria for success in this milestone", - "minLength": 200, - "maxLength": 2000 - }, - "evidence": { - "$ref": "#/definitions/multiLineTextEntryMarkdown", - "title": "Evidence of Completion", - "description": "How you will demonstrate achievement", - "x-placeholder": "Specify the evidence that will demonstrate this milestone is complete", - "minLength": 200, - "maxLength": 2000 - }, - "delivery_month": { - "$ref": "#/definitions/durationInMonths", - "title": "Delivery Month", - "description": "The month when this milestone will be delivered", - "x-placeholder": "Enter the month when this milestone is expected to be delivered", - "minimum": 1, - "maximum": 12 - }, - "cost": { - "$ref": "#/definitions/tokenValueCardanoADA", - "title": "Cost", - "description": "The cost of this milestone in ADA", - "x-placeholder": "Enter the cost associated with this milestone" - }, - "progress": { - "$ref": "#/definitions/dropDownSingleSelect", - "title": "Progress", - "description": "Current status of the milestone", - "x-placeholder": "Enter the percentage of overall project completion progress for this milestone (10-100%)", - "enum": ["10 %", "20 %", "30 %", "40 %", "50 %", "60 %", "70 %", "80 %", "90 %", "100 %"] - } - } - } - } - }, - "required": ["milestone_list"] - } - }, - "x-order": ["milestones"] - }, - "pitch": { - "$ref": "#/definitions/segment", - "title": "Final Pitch", - "x-icon": "presentation-chart-line", - "properties": { - "team": { - "$ref": "#/definitions/section", - "title": "Project Team", - "properties": { - "who": { - "$ref": "#/definitions/multiLineTextEntryMarkdown", - "title": "Who is participating in the project team and what are their roles?", - "description": "Who is participating in the project team and what are their roles?", - "x-guidance": "List your team and collaborators, include links to their Linkedin profiles (or similar) and state what aspect of the project each participant will undertake.\n\nIf additional team members need to be recruited, please state what skills gaps you are looking to fill so readers understand what other roles will be needed to complete the project.\n\nYou are expected to have already engaged the relevant members of the organizations referenced so you have their commitment and capacity to support the project. If you have not taken any steps to this effect, it is likely that the resources will not be available if you are approved for funding, which can jeopardize the project before it has even begun.\n\nYour proposal will be publicly available, so make sure to obtain any consent required before including confidential or third party information.\n\nAll applicants must disclose their project team’s roles and scope of services across all submitted proposals. Failure to disclose this information may lead to disqualification from the current fund round.", - "minLength": 100, - "maxLength": 10240 - } - }, - "required": ["who"] - }, - "budget": { - "$ref": "#/definitions/section", - "title": "Budget & Costs", - "properties": { - "costs": { - "$ref": "#/definitions/multiLineTextEntryMarkdown", - "title": "Please provide a cost breakdown of the proposed work and resources", - "description": "Please provide a cost breakdown of the proposed work and resources", - "x-guidance": "Make sure every item of work is budgeted. It may be helpful to refer to your plan and timeline, list the resources you will need at each stage, and what they cost.\n\nProvide a clear description of any third party product or service you will be using: hardware, software licenses, professional services (e.g. legal, accounting, code auditing).\n\nIf the cost of the project will exceed the funding request, please provide information about how you will cover the shortfall of funding.\n\nMost applicants forget to budget for: publicity, marketing, promotion, community engagement, project management, documentation, and reporting back to the community.\n\nIt is your responsibility to properly manage the funds provided. Make sure to reference [Fund Rules](https://docs.projectcatalyst.io/current-fund/fund-basics/fund-rules) to understand eligibility around costs.", - "minLength": 200, - "maxLength": 10240 - } - }, - "required": ["costs"] - }, - "value": { - "$ref": "#/definitions/section", - "title": "Value for Money", - "properties": { - "note": { - "$ref": "#/definitions/multiLineTextEntryMarkdown", - "title": "How does the cost of the project represent value for the Cardano ecosystem?", - "description": "How does the cost of the project represent value for the Cardano ecosystem?", - "x-guidance": "Provide a compelling reason about how your project represents a good use of funds and justify how it will create value for the Cardano ecosystem.\n\nProvide context or justification about the costs you listed and why you need them.\n\nFor instance, can you reason with supporting evidence that costs are proportional to the average wage in your country, or typical freelance rates in your industry? Is there anything else that helps to support how the project represents value for money?", - "minLength": 200, - "maxLength": 10240 - } - }, - "required": ["note"] - } - }, - "x-order": ["team", "budget", "value"], - "required": ["team", "budget", "value"] - }, - "agreements": { - "$ref": "#/definitions/segment", - "title": "Required Acknowledgements", - "x-icon": "double_check", - "properties": { - "ongoing_projects": { - "$ref": "#/definitions/section", - "title": "Ongoing Projects", - "x-guidance": "Important Notice\n\nPlease review [Fund Rules](https://docs.projectcatalyst.io/current-fund/fund-basics/fund-rules) carefully, as eligibility to participate may be affected by the status of your ongoing projects. Providing accurate information is mandatory, failure to do so will result in your proposal being deemed ineligible in the current Fund.", - "properties": { - "has_ongoing_projects": { - "$ref": "#/definitions/yesNoChoice", - "title": "Have you previously submitted a project in Catalyst that was funded and is not yet completed?", - "description": "Do you have not yet completed projects?", - "x-placeholder": "Select if you or co-proposers have any ongoing projects" - }, - "projects": { - "$ref": "#/definitions/tagInput", - "title": "Project ID's", - "description": "If you answered “yes” to the previous question, please select first how many there are in total and then list all IDs for any projects you are currently involved in that have not been completed yet.", - "x-guidance": "You can find a seven digit project ID on each original proposal page listed on Catalyst website. [Search for yours here.](https://projectcatalyst.io/search)", - "x-subsection": false, - "maxItems": 15, - "minItems": 0, - "items": { - "type": "object", - "required": ["project_id"], - "properties": { - "project_id": { - "type": "string", - "title": "Project ID", - "description": "Seven digit project ID from Catalyst website", - "pattern": "^[0-9]{7}$", - "maxLength": 7, - "minLength": 7 - } - } - } - } - }, - "required": [ - "has_ongoing_projects", - "projects" - ], - "x-order": [ - "has_ongoing_projects", - "projects" - ] - }, - "consent_confirmation": { - "$ref": "#/definitions/section", - "title": "Consent & Confirmation", - "properties": { - "terms_and_conditions": { - "$ref": "#/definitions/agreementConfirmation", - "title": "Terms and Conditions:", - "description": "I confirm that I have read, understand and shall adhere to the [Terms & Conditions](https://docs.projectcatalyst.io/current-fund/fund-basics/project-catalyst-terms-and-conditions), [Fund Rules](https://docs.projectcatalyst.io/current-fund/fund-basics/fund-rules), [Privacy Policy](https://docs.projectcatalyst.io/current-fund/fund-basics/project-catalyst-terms-and-conditions/catalyst-fc-privacy-policy). I understand that providing accurate and truthful information is essential for my proposal to remain eligible to participate in the current Fund." - } - }, - "required": ["terms_and_conditions"], - "x-order": ["terms_and_conditions"] - } + "section": { + "$comment": "UI - Logical Document Sub-Section Break.", + "type": "object", + "additionalProperties": false, + "x-note": "Subsections containing specific details about the proposal." + }, + "singleLineTextEntry": { + "$comment": "UI - Single Line text entry without any markup or rich text capability.", + "type": "string", + "contentMediaType": "text/plain", + "pattern": "^.*$" + }, + "multiLineTextEntryMarkdown": { + "$comment": "UI - Multiline text entry with Markdown content.", + "type": "string", + "contentMediaType": "text/markdown", + "pattern": "^[\\S\\s]*$" + }, + "radioButtonSelect": { + "$comment": "UI - Radio Button Selection", + "type": "string", + "format": "radioButtonSelect" + }, + "tokenValueCardanoADA": { + "$comment": "UI - A Token Value denominated in Cardano ADA.", + "type": "integer", + "format": "token:cardano:ada" + } + }, + "properties": { + "$schema": { + "$ref": "#/definitions/schemaReferenceNonUI", + "default": "./0ce8ab38-9258-4fbc-a62e-7faa6e58318f.schema.json", + "const": "./0ce8ab38-9258-4fbc-a62e-7faa6e58318f.schema.json" + }, + "setup": { + "$ref": "#/definitions/segment", + "title": "Section A — Who and What?", + "description": "Tell us who you are and give your idea a title", + "properties": { + "proposer": { + "$ref": "#/definitions/section", + "title": "Identity Checkpoint", + "description": "Who's behind this proposal", + "properties": { + "applicant": { + "$ref": "#/definitions/singleLineTextEntry", + "title": "Your Name", + "description": "Enter your full name, nickname, or alias", + "minLength": 2, + "maxLength": 100 }, - "x-order": [ - "ongoing_projects", - "consent_confirmation" - ] + "type": { + "$ref": "#/definitions/radioButtonSelect", + "title": "Choose which best applies", + "description": "How are you applying?", + "enum": [ + "Solo", + "Group", + "Company" + ] + } + }, + "required": ["applicant", "type"], + "x-order": ["applicant", "type"] + }, + "title": { + "$ref": "#/definitions/section", + "title": "Give It a Title", + "description": "What's the title for your idea?", + "properties": { + "title": { + "$ref": "#/definitions/singleLineTextEntry", + "title": "Project Banner", + "description": "Write a short title (max 60 chars)", + "minLength": 3, + "maxLength": 60 + } + }, + "required": ["title"] } + }, + "required": ["proposer", "title"], + "x-order": ["proposer", "title"] }, - "required": [ - "setup", - "summary", - "theme", - "details", - "milestones", - "pitch", - "agreements" - ], - "x-order": [ - "setup", - "summary", - "theme", - "campaign_category", - "details", - "milestones", - "pitch", - "agreements" - ] -} + "summary": { + "$ref": "#/definitions/segment", + "title": "Section B — The Core Idea", + "description": "Explain the essentials of your project", + "properties": { + "solution": { + "$ref": "#/definitions/section", + "title": "What's the secret?", + "description": "Describe your project core purpose", + "properties": { + "summary": { + "$ref": "#/definitions/multiLineTextEntryMarkdown", + "title": "One-Paragraph Story", + "description": "Tell us a story about your idea (50–200 chars)", + "minLength": 50, + "maxLength": 200 + } + }, + "required": ["summary"] + }, + "budget": { + "$ref": "#/definitions/section", + "title": "How Much Will It Cost?", + "description": "Tell us how much ADA you need", + "properties": { + "requestedFunds": { + "$ref": "#/definitions/tokenValueCardanoADA", + "title": "Requested (ADA)", + "description": "Enter your desired amount between ₳15k and ₳60k", + "minimum": 15000, + "maximum": 60000 + } + }, + "required": ["requestedFunds"] + } + }, + "required": ["solution", "budget"], + "x-order": ["solution", "budget"] + } + }, + "required": ["setup", "summary"], + "x-order": ["setup", "summary"] +} \ No newline at end of file diff --git a/docs/src/architecture/08_concepts/document_templates/proposal/F14-Generic/example.proposal.json b/docs/src/architecture/08_concepts/document_templates/proposal/F14-Generic/example.proposal.json index fae451c55fa4..3ee93da5d575 100644 --- a/docs/src/architecture/08_concepts/document_templates/proposal/F14-Generic/example.proposal.json +++ b/docs/src/architecture/08_concepts/document_templates/proposal/F14-Generic/example.proposal.json @@ -10,155 +10,11 @@ } }, "summary": { - "budget": { - "requestedFunds": 150000 - }, - "time": { - "duration": 6 - }, - "translation": { - "isTranslated": true, - "originalLanguage": "de", - "originalDocumentLink": "https://example.com/original-doc" - }, - "problem": { - "statement": "Current challenge in the Cardano ecosystem..." - }, "solution": { - "summary": "Our solution provides a comprehensive toolkit..." - }, - "supportingLinks": { - "links": [ - "https://github.com/example/project", - "https://docs.example.com", - "https://example.com/whitepaper", - "https://example.com/roadmap" - ] - }, - "dependencies": { - "hasDependency": true, - "dependencyDetail": "Integration with third-party API service requires external dependencies..." - }, - "open_source": { - "isOpenSource": true, - "licenseInformation": "All source code and documentation will be released under the MIT license." - } - }, - "campaign_category": { - "category_questions": { - "informational_content": { - "answer": false - }, - "foundational_rd": { - "answer": false - }, - "financial_products": { - "answer": false - }, - "early_stage_product": { - "answer": false - }, - "developer_tools": { - "answer": false - }, - "enterprise_partnership": { - "answer": true, - "secondary_question": { - "question": "Example Enterprise with proven track record" - } - }, - "working_product": { - "answer": true, - "secondary_question": { - "question": "Example product with measurable adoption metrics" - } - }, - "timeline": { - "answer": true - }, - "matching_funds": { - "answer": true, - "secondary_question": { - "question": "Example matching funds details" - } - }, - "adoption_potential": { - "answer": true, - "secondary_question": { - "question": "Example measurable outcomes and assessment methods" - } - } - } - }, - "theme": { - "theme": { - "grouped_tag": { - "group": "DeFi", - "tag": "Staking" - } - } - }, - "details": { - "solution": { - "solution": "Our solution involves developing a comprehensive toolkit that will enhance the Cardano developer experience..." - }, - "impact": { - "impact": "The project will significantly impact developer productivity by reducing development time and improving code quality..." - }, - "feasibility": { - "feasibility": "Our team has extensive experience in blockchain development and has successfully delivered similar projects..." - } - }, - "milestones": { - "milestones": { - "milestone_list": [{ - "title": "Initial Setup and Planning", - "outputs": "Project infrastructure setup and detailed planning documents", - "acceptance_criteria": "- Development environment configured\n- Detailed project plan approved", - "evidence": "- GitHub repository setup\n- Documentation of infrastructure\n- Project planning documents", - "delivery_month": 1, - "cost": 30000, - "progress": "Not Started" - }, - { - "title": "Core Development", - "outputs": "Implementation of main features", - "acceptance_criteria": "- Core features implemented\n- Unit tests passing", - "evidence": "- Code repository\n- Test results\n- Technical documentation", - "delivery_month": 3, - "cost": 60000, - "progress": "Not Started" - }, - { - "title": "Final Release and Documentation", - "outputs": "Project completion, documentation, and Project Close-out Report and Video", - "acceptance_criteria": "- All features implemented and tested\n- Documentation complete\n- Close-out report and video delivered", - "evidence": "- Final release\n- Complete documentation\n- Close-out report and video", - "delivery_month": 6, - "cost": 60000, - "progress": "Not Started" - } - ] - } - }, - "pitch": { - "team": { - "who": "Our team consists of experienced blockchain developers with proven track records..." + "summary": "Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test" }, "budget": { - "costs": "Budget breakdown:\n- Development (70%): 105,000 ADA\n- Testing (15%): 22,500 ADA\n- Documentation (15%): 22,500 ADA" - }, - "value": { - "note": "This project provides excellent value for money by delivering essential developer tools..." - } - }, - "agreements": { - "ongoing_projects": { - "has_ongoing_projects": false, - "projects": [] - }, - "consent_confirmation": { - "terms_and_conditions": true + "requestedFunds": 20000 } } } \ No newline at end of file