From 780e75b849c1d7e48a611bc38f584d5e38af2fe5 Mon Sep 17 00:00:00 2001 From: patrick Date: Wed, 20 Sep 2023 18:25:25 +0800 Subject: [PATCH] add test case management --- components/fluent-builtin/pom.xml | 6 +- .../main/java/io/fluent/builtin/XmlUtils.java | 61 + components/fluent-ext/.gitignore | 38 + .../fluent-ext/fluentqa-md/low-code-2.json | 776 +++ .../fluent-ext/fluentqa-md/low-code-3.json | 2456 +++++++ .../fluent-ext/fluentqa-md/low-code.html | 6074 +++++++++++++++++ .../fluent-ext/fluentqa-md/low-code.json | 704 ++ components/fluent-ext/fluentqa-md/pom.xml | 33 + .../java/io/fluentqa/md/MarkdownAccessor.java | 4 + .../java/io/fluentqa/md/package-info.java | 1 + .../fluentqa/md/parser/FieldParseConfig.java | 12 + .../io/fluentqa/md/parser/ParseConfig.java | 22 + .../awesome/AwesomeListParserConfig.java | 14 + .../md/parser/awesome/AwesomeModel.java | 12 + .../awesome/MarkdownAwesomeListParser.java | 46 + .../MarkdownAwesomeListParserTest.java | 88 + .../src/test/resources/low-code-1.md | 204 + .../src/test/resources/low-code-2.md | 172 + .../src/test/resources/low-code-3.md | 200 + .../src/test/resources/low-code-4.md | 241 + .../src/test/resources/low-code-5.md | 149 + .../src/test/resources/low-code-6.md | 146 + .../src/test/resources/test-resources.md | 97 + .../fluentqa-md/test-resources.html | 1374 ++++ .../fluent-ext/fluentqa-mindmap/README.md | 25 + .../fluent-ext/fluentqa-mindmap/pom.xml | 53 + .../fluentqa/mindmap/api/MindMapAccessor.java | 38 + .../mindmap/api/MindMapConvertConfig.java | 24 + .../io/fluentqa/mindmap/api/MindMapPath.java | 32 + .../mindmap/api/MindMapPathRecord.java | 73 + .../mindmap/api/MindMapTransformer.java | 12 + .../fluentqa/mindmap/api/MindmapTypeEnum.java | 31 + .../io/fluentqa/mindmap/api/NodeLevel.java | 13 + .../mindmap/exception/MindMapException.java | 22 + .../mindmap/freemind/FreeMindNode.java | 24 + .../mindmap/freemind/FreeMindTransformer.java | 86 + .../mindmap/freemind/model/Arrowlink.java | 225 + .../mindmap/freemind/model/Attribute.java | 90 + .../freemind/model/AttributeLayout.java | 92 + .../mindmap/freemind/model/Cloud.java | 63 + .../fluentqa/mindmap/freemind/model/Edge.java | 117 + .../fluentqa/mindmap/freemind/model/Font.java | 159 + .../fluentqa/mindmap/freemind/model/Hook.java | 121 + .../fluentqa/mindmap/freemind/model/Html.java | 76 + .../fluentqa/mindmap/freemind/model/Icon.java | 63 + .../mindmap/freemind/model/Linktarget.java | 252 + .../fluentqa/mindmap/freemind/model/Map.java | 96 + .../fluentqa/mindmap/freemind/model/Node.java | 505 ++ .../mindmap/freemind/model/ObjectFactory.java | 159 + .../mindmap/freemind/model/Parameters.java | 362 + .../mindmap/freemind/model/Richcontent.java | 101 + .../fluentqa/mindmap/freemind/model/Text.java | 40 + .../io/fluentqa/mindmap/package-info.java | 1 + .../io/fluentqa/mindmap/xmind/XMindNode.java | 12 + .../io/fluentqa/mindmap/xmind/XMindUtil.java | 62 + .../mindmap/xmind/XmindTransformer.java | 89 + .../mindmap/xmind/model/Attached.java | 18 + .../mindmap/xmind/model/Children.java | 12 + .../mindmap/xmind/model/Comments.java | 14 + .../mindmap/xmind/model/JsonRootBean.java | 13 + .../fluentqa/mindmap/xmind/model/Notes.java | 13 + .../mindmap/xmind/model/RootTopic.java | 19 + .../mindmap/xmind/model/XmindRawData.java | 39 + .../fluentqa-mindmap/src/main/resources/t2.mm | 112 + .../io/fluentqa/mindmap/api/DemoBean.java | 21 + .../fluentqa/mindmap/api/DemoBeanConfig.java | 14 + .../fluentqa/mindmap/api/DemoBeanWOLevel.java | 16 + .../mindmap/api/MindMapAccessorTest.java | 21 + .../freemind/FreeMindConverterTest.java | 22 + .../fluentqa/mindmap/xmind/XMindUtilTest.java | 26 + .../mindmap/xmind/XmindTransformerTest.java | 21 + .../src/test/resources/Xmind10+.xmind | Bin 0 -> 68827 bytes .../src/test/resources/Xmind8.xmind | Bin 0 -> 42662 bytes .../src/test/resources/XmindZen.xmind | Bin 0 -> 73798 bytes .../src/test/resources/case-template.xmind | Bin 0 -> 320826 bytes .../fluentqa-mindmap/src/test/resources/t2.mm | 112 + ...41\347\220\206\347\224\250\344\276\213.mm" | 348 + ...04\344\273\266\347\224\250\344\276\213.mm" | 268 + .../fluent-ext/fluentqa-table/README.md | 38 + components/fluent-ext/fluentqa-table/pom.xml | 130 + .../io/fluentqa/table/ExcelReadWriter.java | 26 + .../java/io/fluentqa/table/package-info.java | 1 + .../fluentqa/table/excel/DemoExcelModel.java | 17 + .../fluentqa/table/excel/ExcelUtilsTest.java | 44 + .../src/test/resources/test.xlsx | 3 + components/fluent-ext/pom.xml | 19 + components/pom.xml | 1 + .../erupts/base/model/NamedModelVO.java | 16 + .../fluentqa/pm/product/repo/ProductRepo.java | 18 + .../pm/product/service/ProductService.java | 38 + .../io/fluentqa/pm/project/model/Project.java | 2 - fluent-erupts/fluent-tc/pom.xml | 16 +- .../java/io/fluentqa/tc/dto/TestCaseDTO.java | 33 + .../handlers/GenerateTestRecordHandler.java | 46 + .../java/io/fluentqa/tc/model/TestCase.java | 128 +- .../java/io/fluentqa/tc/model/TestPlan.java | 72 - .../java/io/fluentqa/tc/model/TestRecord.java | 186 - .../io/fluentqa/tc/model/TestRequirement.java | 76 - .../java/io/fluentqa/tc/model/TestResult.java | 206 + .../java/io/fluentqa/tc/model/TestRun.java | 249 + .../io/fluentqa/tc/model/TestScenario.java | 47 + .../io/fluentqa/tc/repo/TestCaseRepo.java | 14 + .../io/fluentqa/tc/repo/TestResultRepo.java | 11 + .../java/io/fluentqa/tc/repo/TestRunRepo.java | 11 + .../fluentqa/tc/service/TestCaseService.java | 13 + .../tc/service/impl/MindMappingService.java | 57 + .../tc/service/impl/TestCaseServiceImpl.java | 77 + package.sh | 2 + pom.xml | 2 +- 109 files changed, 18376 insertions(+), 380 deletions(-) create mode 100644 components/fluent-builtin/src/main/java/io/fluent/builtin/XmlUtils.java create mode 100644 components/fluent-ext/.gitignore create mode 100644 components/fluent-ext/fluentqa-md/low-code-2.json create mode 100644 components/fluent-ext/fluentqa-md/low-code-3.json create mode 100644 components/fluent-ext/fluentqa-md/low-code.html create mode 100644 components/fluent-ext/fluentqa-md/low-code.json create mode 100644 components/fluent-ext/fluentqa-md/pom.xml create mode 100644 components/fluent-ext/fluentqa-md/src/main/java/io/fluentqa/md/MarkdownAccessor.java create mode 100644 components/fluent-ext/fluentqa-md/src/main/java/io/fluentqa/md/package-info.java create mode 100644 components/fluent-ext/fluentqa-md/src/main/java/io/fluentqa/md/parser/FieldParseConfig.java create mode 100644 components/fluent-ext/fluentqa-md/src/main/java/io/fluentqa/md/parser/ParseConfig.java create mode 100644 components/fluent-ext/fluentqa-md/src/main/java/io/fluentqa/md/parser/awesome/AwesomeListParserConfig.java create mode 100644 components/fluent-ext/fluentqa-md/src/main/java/io/fluentqa/md/parser/awesome/AwesomeModel.java create mode 100644 components/fluent-ext/fluentqa-md/src/main/java/io/fluentqa/md/parser/awesome/MarkdownAwesomeListParser.java create mode 100644 components/fluent-ext/fluentqa-md/src/test/java/io/fluentqa/md/parsers/MarkdownAwesomeListParserTest.java create mode 100644 components/fluent-ext/fluentqa-md/src/test/resources/low-code-1.md create mode 100644 components/fluent-ext/fluentqa-md/src/test/resources/low-code-2.md create mode 100644 components/fluent-ext/fluentqa-md/src/test/resources/low-code-3.md create mode 100644 components/fluent-ext/fluentqa-md/src/test/resources/low-code-4.md create mode 100644 components/fluent-ext/fluentqa-md/src/test/resources/low-code-5.md create mode 100644 components/fluent-ext/fluentqa-md/src/test/resources/low-code-6.md create mode 100644 components/fluent-ext/fluentqa-md/src/test/resources/test-resources.md create mode 100644 components/fluent-ext/fluentqa-md/test-resources.html create mode 100644 components/fluent-ext/fluentqa-mindmap/README.md create mode 100644 components/fluent-ext/fluentqa-mindmap/pom.xml create mode 100644 components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/api/MindMapAccessor.java create mode 100644 components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/api/MindMapConvertConfig.java create mode 100644 components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/api/MindMapPath.java create mode 100644 components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/api/MindMapPathRecord.java create mode 100644 components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/api/MindMapTransformer.java create mode 100644 components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/api/MindmapTypeEnum.java create mode 100644 components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/api/NodeLevel.java create mode 100644 components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/exception/MindMapException.java create mode 100644 components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/freemind/FreeMindNode.java create mode 100644 components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/freemind/FreeMindTransformer.java create mode 100644 components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/freemind/model/Arrowlink.java create mode 100644 components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/freemind/model/Attribute.java create mode 100644 components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/freemind/model/AttributeLayout.java create mode 100644 components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/freemind/model/Cloud.java create mode 100644 components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/freemind/model/Edge.java create mode 100644 components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/freemind/model/Font.java create mode 100644 components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/freemind/model/Hook.java create mode 100644 components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/freemind/model/Html.java create mode 100644 components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/freemind/model/Icon.java create mode 100644 components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/freemind/model/Linktarget.java create mode 100644 components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/freemind/model/Map.java create mode 100644 components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/freemind/model/Node.java create mode 100644 components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/freemind/model/ObjectFactory.java create mode 100644 components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/freemind/model/Parameters.java create mode 100644 components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/freemind/model/Richcontent.java create mode 100644 components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/freemind/model/Text.java create mode 100644 components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/package-info.java create mode 100644 components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/xmind/XMindNode.java create mode 100644 components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/xmind/XMindUtil.java create mode 100644 components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/xmind/XmindTransformer.java create mode 100755 components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/xmind/model/Attached.java create mode 100755 components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/xmind/model/Children.java create mode 100755 components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/xmind/model/Comments.java create mode 100755 components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/xmind/model/JsonRootBean.java create mode 100755 components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/xmind/model/Notes.java create mode 100755 components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/xmind/model/RootTopic.java create mode 100644 components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/xmind/model/XmindRawData.java create mode 100644 components/fluent-ext/fluentqa-mindmap/src/main/resources/t2.mm create mode 100644 components/fluent-ext/fluentqa-mindmap/src/test/java/io/fluentqa/mindmap/api/DemoBean.java create mode 100644 components/fluent-ext/fluentqa-mindmap/src/test/java/io/fluentqa/mindmap/api/DemoBeanConfig.java create mode 100644 components/fluent-ext/fluentqa-mindmap/src/test/java/io/fluentqa/mindmap/api/DemoBeanWOLevel.java create mode 100644 components/fluent-ext/fluentqa-mindmap/src/test/java/io/fluentqa/mindmap/api/MindMapAccessorTest.java create mode 100644 components/fluent-ext/fluentqa-mindmap/src/test/java/io/fluentqa/mindmap/freemind/FreeMindConverterTest.java create mode 100644 components/fluent-ext/fluentqa-mindmap/src/test/java/io/fluentqa/mindmap/xmind/XMindUtilTest.java create mode 100644 components/fluent-ext/fluentqa-mindmap/src/test/java/io/fluentqa/mindmap/xmind/XmindTransformerTest.java create mode 100644 components/fluent-ext/fluentqa-mindmap/src/test/resources/Xmind10+.xmind create mode 100644 components/fluent-ext/fluentqa-mindmap/src/test/resources/Xmind8.xmind create mode 100644 components/fluent-ext/fluentqa-mindmap/src/test/resources/XmindZen.xmind create mode 100644 components/fluent-ext/fluentqa-mindmap/src/test/resources/case-template.xmind create mode 100644 components/fluent-ext/fluentqa-mindmap/src/test/resources/t2.mm create mode 100644 "components/fluent-ext/fluentqa-mindmap/src/test/resources/\345\205\203\344\273\266\347\256\241\347\220\206\347\224\250\344\276\213.mm" create mode 100644 "components/fluent-ext/fluentqa-mindmap/src/test/resources/\351\200\232\347\224\250\347\273\204\344\273\266\347\224\250\344\276\213.mm" create mode 100644 components/fluent-ext/fluentqa-table/README.md create mode 100644 components/fluent-ext/fluentqa-table/pom.xml create mode 100644 components/fluent-ext/fluentqa-table/src/main/java/io/fluentqa/table/ExcelReadWriter.java create mode 100644 components/fluent-ext/fluentqa-table/src/main/java/io/fluentqa/table/package-info.java create mode 100644 components/fluent-ext/fluentqa-table/src/test/java/io/fluentqa/table/excel/DemoExcelModel.java create mode 100644 components/fluent-ext/fluentqa-table/src/test/java/io/fluentqa/table/excel/ExcelUtilsTest.java create mode 100644 components/fluent-ext/fluentqa-table/src/test/resources/test.xlsx create mode 100644 components/fluent-ext/pom.xml create mode 100644 fluent-erupts/fluent-pm/src/main/java/io/fluentqa/pm/product/repo/ProductRepo.java create mode 100644 fluent-erupts/fluent-pm/src/main/java/io/fluentqa/pm/product/service/ProductService.java create mode 100644 fluent-erupts/fluent-tc/src/main/java/io/fluentqa/tc/dto/TestCaseDTO.java create mode 100644 fluent-erupts/fluent-tc/src/main/java/io/fluentqa/tc/handlers/GenerateTestRecordHandler.java delete mode 100644 fluent-erupts/fluent-tc/src/main/java/io/fluentqa/tc/model/TestPlan.java delete mode 100644 fluent-erupts/fluent-tc/src/main/java/io/fluentqa/tc/model/TestRecord.java delete mode 100644 fluent-erupts/fluent-tc/src/main/java/io/fluentqa/tc/model/TestRequirement.java create mode 100644 fluent-erupts/fluent-tc/src/main/java/io/fluentqa/tc/model/TestResult.java create mode 100644 fluent-erupts/fluent-tc/src/main/java/io/fluentqa/tc/model/TestRun.java create mode 100644 fluent-erupts/fluent-tc/src/main/java/io/fluentqa/tc/model/TestScenario.java create mode 100644 fluent-erupts/fluent-tc/src/main/java/io/fluentqa/tc/repo/TestCaseRepo.java create mode 100644 fluent-erupts/fluent-tc/src/main/java/io/fluentqa/tc/repo/TestResultRepo.java create mode 100644 fluent-erupts/fluent-tc/src/main/java/io/fluentqa/tc/repo/TestRunRepo.java create mode 100644 fluent-erupts/fluent-tc/src/main/java/io/fluentqa/tc/service/TestCaseService.java create mode 100644 fluent-erupts/fluent-tc/src/main/java/io/fluentqa/tc/service/impl/MindMappingService.java create mode 100644 fluent-erupts/fluent-tc/src/main/java/io/fluentqa/tc/service/impl/TestCaseServiceImpl.java create mode 100644 package.sh diff --git a/components/fluent-builtin/pom.xml b/components/fluent-builtin/pom.xml index e1f6fd0..475a93c 100644 --- a/components/fluent-builtin/pom.xml +++ b/components/fluent-builtin/pom.xml @@ -41,7 +41,11 @@ 2.21.0 test - + + jakarta.xml.bind + jakarta.xml.bind-api + 4.0.0 + diff --git a/components/fluent-builtin/src/main/java/io/fluent/builtin/XmlUtils.java b/components/fluent-builtin/src/main/java/io/fluent/builtin/XmlUtils.java new file mode 100644 index 0000000..6de0523 --- /dev/null +++ b/components/fluent-builtin/src/main/java/io/fluent/builtin/XmlUtils.java @@ -0,0 +1,61 @@ +package io.fluent.builtin; + +import cn.hutool.core.util.XmlUtil; +import jakarta.xml.bind.JAXBContext; +import jakarta.xml.bind.Unmarshaller; +import lombok.extern.slf4j.Slf4j; +import org.w3c.dom.Document; + +import javax.xml.xpath.XPathConstants; +import java.io.BufferedInputStream; +import java.io.FileInputStream; + +@Slf4j +public class XmlUtils extends XmlUtil { + + public static Document getDocument(String xmlFilePath) { + return XmlUtil.readXML(xmlFilePath); + } + + public static Object getValueByXpath(String xmlFilePath, + String xpathExpr) { + Document doc = getDocument(xmlFilePath); + return XmlUtil.getByXPath(xpathExpr, doc, XPathConstants.STRING); + } + + public static Object getValueByXpath(Document doc, + String xpathExpr) { + return XmlUtil.getByXPath(xpathExpr, doc, XPathConstants.STRING); + } + + /** + * JAXB Read Xml file + * + * @param xmlFilePath + * @param clazz + * @return + */ + public static T readXmlToObject(String xmlFilePath, Class clazz) { + + try { + JAXBContext context = JAXBContext.newInstance(clazz); + Unmarshaller unmarshaller = context.createUnmarshaller(); + return (T) unmarshaller.unmarshal(new BufferedInputStream(new FileInputStream(xmlFilePath))); + } catch (Exception e) { + log.error("parse xml failed,", e); + throw new RuntimeException(e); + } + } + + public static T readXmlToObject(Document doc, Class clazz) { + + try { + JAXBContext context = JAXBContext.newInstance(clazz); + Unmarshaller unmarshaller = context.createUnmarshaller(); + return (T) unmarshaller.unmarshal(doc); + } catch (Exception e) { + log.error("parse xml failed,", e); + throw new RuntimeException(e); + } + } +} diff --git a/components/fluent-ext/.gitignore b/components/fluent-ext/.gitignore new file mode 100644 index 0000000..5ff6309 --- /dev/null +++ b/components/fluent-ext/.gitignore @@ -0,0 +1,38 @@ +target/ +!.mvn/wrapper/maven-wrapper.jar +!**/src/main/**/target/ +!**/src/test/**/target/ + +### IntelliJ IDEA ### +.idea/modules.xml +.idea/jarRepositories.xml +.idea/compiler.xml +.idea/libraries/ +*.iws +*.iml +*.ipr + +### Eclipse ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ +build/ +!**/src/main/**/build/ +!**/src/test/**/build/ + +### VS Code ### +.vscode/ + +### Mac OS ### +.DS_Store \ No newline at end of file diff --git a/components/fluent-ext/fluentqa-md/low-code-2.json b/components/fluent-ext/fluentqa-md/low-code-2.json new file mode 100644 index 0000000..26c94ec --- /dev/null +++ b/components/fluent-ext/fluentqa-md/low-code-2.json @@ -0,0 +1,776 @@ +[ + { + "category": "Table of Contents", + "url": "#awesome-low-code", + "name": "Awesome low-code!", + "desc": "Awesome low-code!" + }, + { + "category": "Table of Contents", + "url": "#license", + "name": "License", + "desc": "License" + }, + { + "category": "Table of Contents", + "url": "#table-of-contents", + "name": "Table of Contents", + "desc": "Table of Contents Automation Educational Flow-based programming Infrastructure Machine Learning Marketing Online database creator apps Visual programming Misc" + }, + { + "category": "Table of Contents", + "url": "#automation", + "name": "Automation", + "desc": "Automation" + }, + { + "category": "Table of Contents", + "url": "#educational", + "name": "Educational", + "desc": "Educational" + }, + { + "category": "Table of Contents", + "url": "#flow-based-programming", + "name": "Flow-based programming", + "desc": "Flow-based programming" + }, + { + "category": "Table of Contents", + "url": "#infrastructure", + "name": "Infrastructure", + "desc": "Infrastructure" + }, + { + "category": "Table of Contents", + "url": "#machine-learning", + "name": "Machine Learning", + "desc": "Machine Learning" + }, + { + "category": "Table of Contents", + "url": "#marketing", + "name": "Marketing", + "desc": "Marketing" + }, + { + "category": "Table of Contents", + "url": "#online-database-creator-apps", + "name": "Online database creator apps", + "desc": "Online database creator apps" + }, + { + "category": "Table of Contents", + "url": "#visual-programming", + "name": "Visual programming", + "desc": "Visual programming" + }, + { + "category": "Table of Contents", + "url": "#misc", + "name": "Misc", + "desc": "Misc" + }, + { + "category": "Automation", + "url": "https://www.appian.com/", + "name": "Appian", + "desc": "Appian - Discover the power of low-code automation." + }, + { + "category": "Automation", + "url": "https://automate.io", + "name": "Automate.io", + "desc": "Automate.io - Connect your cloud apps." + }, + { + "category": "Automation", + "url": "https://axiom.ai/", + "name": "Axiom", + "desc": "Axiom - Browser automation. Quickly, without code." + }, + { + "category": "Automation", + "url": "https://www.blinkops.com", + "name": "Blink", + "desc": "Blink - No-code automation for CloudOps." + }, + { + "category": "Automation", + "url": "https://camunda.com/", + "name": "Camunda", + "desc": "Camunda - Automate Any Process, Anywhere." + }, + { + "category": "Automation", + "url": "https://datafetcher.com/", + "name": "Data Fetcher for Airtable", + "desc": "Data Fetcher for Airtable - Connect Airtable to any API using the Data Fetcher app." + }, + { + "category": "Automation", + "url": "https://www.make.com", + "name": "Make", + "desc": "Make - Make lets you design, build, and automate anything from tasks and workflows to apps and systems." + }, + { + "category": "Automation", + "url": "https://onesimpleapi.com/", + "name": "OneSimpleAPI", + "desc": "OneSimpleAPI - A toolbox with all the things you need to get your no-code project to success: PDF generation, Currency Exchange, QR codes, Screenshots, and more." + }, + { + "category": "Automation", + "url": "https://phantombuster.com/", + "name": "Phantombuster", + "desc": "Phantombuster - Code free automations and data extraction." + }, + { + "category": "Automation", + "url": "https://reflect.run/", + "name": "Reflect", + "desc": "Reflect - Automated regression tests without a line of code." + }, + { + "category": "Automation", + "url": "https://stackby.com/", + "name": "Stackby", + "desc": "Stackby - Automate workflows, build custom tools, collaborate with your team." + }, + { + "category": "Automation", + "url": "https://www.tines.com/", + "name": "tines", + "desc": "tines - No-code automation for security teams." + }, + { + "category": "Automation", + "url": "https://www.uipath.com/", + "name": "Uipath", + "desc": "Uipath - We make robots so people don’t have to be robots." + }, + { + "category": "Educational", + "url": "https://www.youtube.com/channel/UCXv_CS0DaUVS25tFGkRALoA", + "name": "Doc Willianms", + "desc": "Doc Willianms - No Code tutorials." + }, + { + "category": "Educational", + "url": "https://www.makerpad.co/", + "name": "Markerpad", + "desc": "Markerpad - Join thousands learning to build software. No coding required." + }, + { + "category": "Flow-based programming", + "url": "https://aws.amazon.com/appflow/", + "name": "AppFlow", + "desc": "AppFlow - Securely integrate apps and automate data flows at any scale, without code." + }, + { + "category": "Flow-based programming", + "url": "https://www.bravostudio.app/", + "name": "Bravo Studio", + "desc": "Bravo Studio - Bravo’s powerful no-code approach to mobile app development." + }, + { + "category": "Flow-based programming", + "url": "https://funnel.io/", + "name": "Funnel", + "desc": "Funnel - All your marketing and advertising data where you want it." + }, + { + "category": "Flow-based programming", + "url": "https://hookdeck.com/", + "name": "Hookdeck", + "desc": "Hookdeck - Never miss a webhook." + }, + { + "category": "Flow-based programming", + "url": "https://ifttt.com/", + "name": "Ifttt", + "desc": "Ifttt - Helps your apps and devices work together in new ways." + }, + { + "category": "Flow-based programming", + "url": "https://www.impira.com/", + "name": "Impira", + "desc": "Impira - Grab data from any document in seconds with Impira’s no-code platform powered by machine learning." + }, + { + "category": "Flow-based programming", + "url": "https://joonbot.com/", + "name": "joonbot", + "desc": "joonbot - Make a chatbot in minutes with our intuitive no-code chatbot builder." + }, + { + "category": "Flow-based programming", + "url": "https://kissflow.com", + "name": "Kissflow", + "desc": "Kissflow - The full spectrum of work on one platform." + }, + { + "category": "Flow-based programming", + "url": "https://www.memberstack.com/", + "name": "Memberstack", + "desc": "Memberstack - Authentication & payments for companies who love Webflow, Stripe, & React." + }, + { + "category": "Flow-based programming", + "url": "https://n8n.io/", + "name": "n8n.io", + "desc": "n8n.io - Extendable workflow automation." + }, + { + "category": "Flow-based programming", + "url": "https://nodered.org/", + "name": "Node-RED", + "desc": "Node-RED - A programming tool for wiring together hardware devices, APIs and online services in new and interesting ways." + }, + { + "category": "Flow-based programming", + "url": "https://parabola.io/", + "name": "Parabola", + "desc": "Parabola - Hand off your routine data tasks by describing them in Parabola. Build once, reuse infinitely." + }, + { + "category": "Flow-based programming", + "url": "https://pipedream.com/", + "name": "Pipedream", + "desc": "Pipedream - Connect APIs, remarkably fast with no code. And with code-level control when you need it." + }, + { + "category": "Flow-based programming", + "url": "https://getrunnable.com/", + "name": "Runnable", + "desc": "Runnable - A low-code framework for building user-facing internal workflows." + }, + { + "category": "Flow-based programming", + "url": "https://stately.ai/", + "name": "Stately", + "desc": "Stately - The ideal state of visual application logic." + }, + { + "category": "Flow-based programming", + "url": "https://structr.com", + "name": "Structr", + "desc": "Structr - The visualization of the data and program structures as a graph accelerates the development and makes the results easily comprehensible for everyone at any time." + }, + { + "category": "Flow-based programming", + "url": "https://wayscript.com", + "name": "Wayscript", + "desc": "Wayscript - A rapid scripting platform for developers." + }, + { + "category": "Flow-based programming", + "url": "https://zapier.com", + "name": "Zapier", + "desc": "Zapier - Connect your apps and automate workflows." + }, + { + "category": "Infrastructure", + "url": "https://www.harpoon.io/", + "name": "harpoon", + "desc": "harpoon - Deploy software with No Code Kubernetes." + }, + { + "category": "Machine Learning", + "url": "https://accern.com", + "name": "Accern", + "desc": "Accern - Accelerate AI Workflows for Financial Services." + }, + { + "category": "Machine Learning", + "url": "https://flow.microsoft.com/en-us/ai-builder/", + "name": "AI Builder", + "desc": "AI Builder - Bring intelligent automation to your business processes with AI that’s easy to train and configure in Power Automate." + }, + { + "category": "Machine Learning", + "url": "https://www.alteryx.com/products/alteryx-platform/machine-learning", + "name": "Alteryx", + "desc": "Alteryx - Scale data science across your business with automated machine learning (AutoML)." + }, + { + "category": "Machine Learning", + "url": "https://www.dataiku.com/product/key-capabilities/machine-learning", + "name": "Dataiku", + "desc": "Dataiku - Build advanced machine learning models using the latest techniques." + }, + { + "category": "Machine Learning", + "url": "https://www.datarobot.com/platform/visual-ai/", + "name": "DataRobot", + "desc": "DataRobot - DataRobot Automated Machine Learning with Visual AI." + }, + { + "category": "Machine Learning", + "url": "https://www.gravity-ai.com/", + "name": "Gravity-AI", + "desc": "Gravity-AI - The fastest & most secure way to solve business problems with A.I." + }, + { + "category": "Machine Learning", + "url": "https://www.h2o.ai/", + "name": "h2o", + "desc": "h2o - Get free, hands-on experience with the H2O AI Hybrid Cloud." + }, + { + "category": "Machine Learning", + "url": "https://www.jasper.ai/", + "name": "Jasper", + "desc": "Jasper - Artificial intelligence makes it fast & easy to create content for your blog, social media, website, and more!" + }, + { + "category": "Machine Learning", + "url": "https://www.knime.com/knime-analytics-platform", + "name": "Knime", + "desc": "Knime - Creating Data Science." + }, + { + "category": "Machine Learning", + "url": "https://rapidminer.com/products/studio/", + "name": "RapidMiner", + "desc": "RapidMiner - Comprehensive data science platform with visual workflow design and full automation." + }, + { + "category": "Machine Learning", + "url": "https://noogata.com/", + "name": "Noogata", + "desc": "Noogata - AI platform gives companies the impact of data science without the burden of development or the limitations of out-of-the-box solutions." + }, + { + "category": "Machine Learning", + "url": "https://aws.amazon.com/sagemaker/", + "name": "SaegMaker", + "desc": "SaegMaker - Machine learning for every data scientist and developer." + }, + { + "category": "Machine Learning", + "url": "https://www.sas.com/en_si/software/machine-learning-cloud.html", + "name": "Sas", + "desc": "Sas - On-demand programming access to machine learning algorithms in the cloud." + }, + { + "category": "Machine Learning", + "url": "https://cloud.google.com/vertex-ai", + "name": "Vertex-AI", + "desc": "Vertex-AI - Build, deploy, and scale machine learning (ML) models faster, with fully managed ML tools for any use case." + }, + { + "category": "Marketing", + "url": "https://appsumo.com/", + "name": "AppSumo", + "desc": "AppSumo - Discover, buy, & sell the products you need to grow your business." + }, + { + "category": "Marketing", + "url": "https://www.bannerbear.com/", + "name": "Bannerbear", + "desc": "Bannerbear - Auto-generate social media visuals, ecommerce banners, dynamic email images and more with our API and integrations." + }, + { + "category": "Marketing", + "url": "https://www.klaviyo.com/", + "name": "Klaviyo", + "desc": "Klaviyo - Ecommerce marketing automation platform." + }, + { + "category": "Online database creator apps", + "url": "https://airtable.com/", + "name": "Airtable", + "desc": "Airtable - Part spreadsheet, part database, and entirely flexible, teams use Airtable to organize their work, their way." + }, + { + "category": "Online database creator apps", + "url": "https://amplication.com/", + "name": "Amplication", + "desc": "Amplication - Build production-ready Node.js applications without wasting time on repetitive coding." + }, + { + "category": "Online database creator apps", + "url": "https://baserow.io/", + "name": "Baserow", + "desc": "Baserow - Open source no-code database and Airtable alternative." + }, + { + "category": "Online database creator apps", + "url": "https://www.caspio.com/", + "name": "Caspio", + "desc": "Caspio - Building online database applications without coding." + }, + { + "category": "Online database creator apps", + "url": "https://www.claris.com/", + "name": "Claris", + "desc": "Claris - Quickly build custom apps yourself that you can’t find anywhere else." + }, + { + "category": "Online database creator apps", + "url": "https://coda.io/", + "name": "Coda", + "desc": "Coda - All-in-one doc." + }, + { + "category": "Online database creator apps", + "url": "https://hasura.io/", + "name": "Hasura", + "desc": "Hasura - From your databases to a unified GraphQL API in just one minute." + }, + { + "category": "Online database creator apps", + "url": "https://nocodb.com/", + "name": "NocoDB", + "desc": "NocoDB - NocoDB is an open source #NoCode platform that turns any database into a smart spreadsheet." + }, + { + "category": "Online database creator apps", + "url": "https://retool.com/", + "name": "Retool", + "desc": "Retool - Retool cuts the time it takes to build internal tools in half so you can focus on your customers." + }, + { + "category": "Online database creator apps", + "url": "https://rows.com/", + "name": "Rows", + "desc": "Rows - The spreadsheet with superpowers." + }, + { + "category": "Online database creator apps", + "url": "https://supabase.com/", + "name": "Supabase", + "desc": "Supabase - The Open SourceFirebase Alternative." + }, + { + "category": "Visual programming", + "url": "https://www.adalo.com/", + "name": "Adalo", + "desc": "Adalo - Turn Your Amazing App Concept Into Reality Without Coding!" + }, + { + "category": "Visual programming", + "url": "https://www.appbase.io", + "name": "Appbase.io", + "desc": "Appbase.io - Elasticsearch supercharged." + }, + { + "category": "Visual programming", + "url": "https://www.appsheet.com/", + "name": "AppSheet", + "desc": "AppSheet - The fastest way to build apps and automate work." + }, + { + "category": "Visual programming", + "url": "https://www.appsmith.com/", + "name": "Appsmith", + "desc": "Appsmith - A powerful open source framework to build internal tools." + }, + { + "category": "Visual programming", + "url": "https://appwrite.io/", + "name": "Appwrite", + "desc": "Appwrite - Secure Open-Source Backend Server for Web, Mobile & Flutter Developers." + }, + { + "category": "Visual programming", + "url": "https://aws.amazon.com/application-composer/", + "name": "AWS Application Composer", + "desc": "AWS Application Composer - Visually design and build serverless applications quickly." + }, + { + "category": "Visual programming", + "url": "https://www.bildr.com", + "name": "Bildr", + "desc": "Bildr - Open-ended, extensible, collaboration-focused website and web app builder." + }, + { + "category": "Visual programming", + "url": "https://www.boundlesslabs.com/", + "name": "Boundlesslabs", + "desc": "Boundlesslabs - Boundless lets you build the web site of your dreams. No code required." + }, + { + "category": "Visual programming", + "url": "https://bubble.io/", + "name": "bubble", + "desc": "bubble - A code-free programming language that lets you build and host web applications without engineers." + }, + { + "category": "Visual programming", + "url": "https://carrd.co/", + "name": "Carrd", + "desc": "Carrd - Simple, free, fully responsive one-page sites for pretty much anything." + }, + { + "category": "Visual programming", + "url": "https://cloudscape.design/", + "name": "Cloudscape", + "desc": "Cloudscape - An open source design system for the cloud." + }, + { + "category": "Visual programming", + "url": "https://www.dronahq.com", + "name": "Dronahq", + "desc": "Dronahq - Build business apps without coding." + }, + { + "category": "Visual programming", + "url": "https://heyflow.app/", + "name": "Heyflow", + "desc": "Heyflow - Build interactive flows." + }, + { + "category": "Visual programming", + "url": "https://www.glideapps.com/", + "name": "Glide", + "desc": "Glide - Create an app from a Google Sheet in five minutes, for free." + }, + { + "category": "Visual programming", + "url": "https://www.growform.co/", + "name": "Growform", + "desc": "Growform - The Multi Step Form Builder that Gets You More Leads." + }, + { + "category": "Visual programming", + "url": "https://www.honeycode.aws/", + "name": "Honeycode", + "desc": "Honeycode - Build a better way to work." + }, + { + "category": "Visual programming", + "url": "https://insomnia.rest", + "name": "Insomnia", + "desc": "Insomnia - Build APIs that work." + }, + { + "category": "Visual programming", + "url": "https://www.jotform.com/products/apps/", + "name": "Jotform App", + "desc": "Jotform App - Create apps for your business." + }, + { + "category": "Visual programming", + "url": "https://www.mendix.com/", + "name": "Mendix", + "desc": "Mendix - Accelerate enterprise app development." + }, + { + "category": "Visual programming", + "url": "https://www.outsystems.com/", + "name": "Outsystems", + "desc": "Outsystems - Build Applications Fast, Right, and for the Future." + }, + { + "category": "Visual programming", + "url": "https://www.plasmic.app/", + "name": "Plasmic", + "desc": "Plasmic - The visual builder for your tech stack." + }, + { + "category": "Visual programming", + "url": "https://www.potion.so/", + "name": "Potion", + "desc": "Potion - Create custom websitesin minutes. All on Notion." + }, + { + "category": "Visual programming", + "url": "https://powerapps.microsoft.com", + "name": "Power Apps", + "desc": "Power Apps - Create the high productivity apps you need for your business with an advanced set of tools." + }, + { + "category": "Visual programming", + "url": "https://quarkly.io", + "name": "Quarkly", + "desc": "Quarkly - Design tool for creating websites and web apps." + }, + { + "category": "Visual programming", + "url": "https://www.quickbase.com", + "name": "Quickbase", + "desc": "Quickbase - Application development platform that unites business and IT teams." + }, + { + "category": "Visual programming", + "url": "https://www.sanity.io/", + "name": "Sanity", + "desc": "Sanity - The unified content platform." + }, + { + "category": "Visual programming", + "url": "https://www.sap.com/products/technology-platform/low-code.html", + "name": "SAP Build", + "desc": "SAP Build - Create apps, automate processes, and design business sites with drag-and-drop simplicity." + }, + { + "category": "Visual programming", + "url": "https://shuffle.dev/", + "name": "Shuffle", + "desc": "Shuffle - Create teamplate in minutes." + }, + { + "category": "Visual programming", + "url": "https://www.softr.io", + "name": "Softr", + "desc": "Softr - From zero to a website in 5 minutes, using building blocks." + }, + { + "category": "Visual programming", + "url": "https://stacker.app", + "name": "Stacker", + "desc": "Stacker - Turn your spreadsheets into applications." + }, + { + "category": "Visual programming", + "url": "https://storybook.js.org", + "name": "Storybook", + "desc": "Storybook - Build component driven UIs faster." + }, + { + "category": "Visual programming", + "url": "https://super.so", + "name": "Super", + "desc": "Super - Build websites with the simplicity of Notion." + }, + { + "category": "Visual programming", + "url": "https://typedream.com", + "name": "Typedream", + "desc": "Typedream - The new way to make a website." + }, + { + "category": "Visual programming", + "url": "https://versoly.com/", + "name": "Versoly", + "desc": "Versoly - The no-code website builder that everyone loves to use." + }, + { + "category": "Visual programming", + "url": "https://webflow.com", + "name": "Webflow", + "desc": "Webflow - Build better business websites, faster. Without coding." + }, + { + "category": "Visual programming", + "url": "https://www.wized.io", + "name": "Wized", + "desc": "Wized - Rapidly build real web applications without coding." + }, + { + "category": "Misc", + "url": "https://www.algolia.com/", + "name": "Algolia", + "desc": "Algolia - Flexible Search & Discovery Hosted APIs." + }, + { + "category": "Misc", + "url": "https://autocode.com", + "name": "Autocode", + "desc": "Autocode - New user notifications. Purchase alerts. Scheduled jobs. SQL queries." + }, + { + "category": "Misc", + "url": "https://www.craftar.io", + "name": "Craftar", + "desc": "Craftar - Build APIs with NoCode at Lightning Speed." + }, + { + "category": "Misc", + "url": "https://www.doppler.com/", + "name": "Doppler", + "desc": "Doppler - Sync environment variables at scale." + }, + { + "category": "Misc", + "url": "https://fibery.io", + "name": "Fibery", + "desc": "Fibery - Build your own workspace." + }, + { + "category": "Misc", + "url": "https://getstream.io", + "name": "Getstream", + "desc": "Getstream - Stream powers Chat Messaging and Activity Feeds for billions of global end-users across thousands of different apps." + }, + { + "category": "Misc", + "url": "https://linx.software", + "name": "Linx", + "desc": "Linx - General-purpose low-code platform for building custom backends APIs, automations and integrations" + }, + { + "category": "Misc", + "url": "https://www.makerpad.co/", + "name": "Makerpad", + "desc": "Makerpad - Build tools & automate at work without code." + }, + { + "category": "Misc", + "url": "https://nocodeapi.com/", + "name": "NoCodeAPI", + "desc": "NoCodeAPI - The easiest way to connect with APIs." + }, + { + "category": "Misc", + "url": "https://placid.app/", + "name": "placeid", + "desc": "placeid - Generate your social share images automatically." + }, + { + "category": "Misc", + "url": "https://saasblocks.io/", + "name": "SaaS Blocks", + "desc": "SaaS Blocks - Ready-to-use building blocks and APIs to take your SaaS application to the next level" + }, + { + "category": "Misc", + "url": "https://www.screenshotapi.net/", + "name": "Screenshot", + "desc": "Screenshot - Programmatic Screenshots of Any Website in Seconds." + }, + { + "category": "Misc", + "url": "https://shopify.com/", + "name": "Shopify", + "desc": "Shopify - Build your business." + }, + { + "category": "Misc", + "url": "https://simplescraper.io/", + "name": "Simplescraper", + "desc": "Simplescraper - Extract data from any website in seconds." + }, + { + "category": "Misc", + "url": "https://stripe.com", + "name": "Stripe", + "desc": "Stripe - The new standard in online payments." + }, + { + "category": "Misc", + "url": "https://github.com/ToolJet/ToolJet", + "name": "ToolJet", + "desc": "ToolJet - Low-code framework for building internal tools." + }, + { + "category": "Misc", + "url": "https://vantiq.com/", + "name": "Vantiq", + "desc": "Vantiq - The Only Low Code Platform for Real Time Systems." + }, + { + "category": "Misc", + "url": "https://www.voiceflow.com/", + "name": "Voiceflow", + "desc": "Voiceflow - Design, prototype and build voice apps." + }, + { + "category": "Misc", + "url": "https://www.zendesk.com/", + "name": "Zendesk", + "desc": "Zendesk - Build the best customer experiences." + } +] \ No newline at end of file diff --git a/components/fluent-ext/fluentqa-md/low-code-3.json b/components/fluent-ext/fluentqa-md/low-code-3.json new file mode 100644 index 0000000..0d2815f --- /dev/null +++ b/components/fluent-ext/fluentqa-md/low-code-3.json @@ -0,0 +1,2456 @@ +`[ + { + "category": "Contents", + "url": "#awesome-low-code-", + "name": "Awesome Low Code", + "desc": "Awesome Low Code Contents Platforms Citizen Automation and Development Platform Low Code Application Platform Business Process Management Robotic Process Automation Intelligent Virtual Agent Integration Platform as a Service Low Code API Management Platform Tools, Extensions and Frameworks Power Platform (Microsoft) Reference Resources Power Platform (Microsoft) Workato Learning Resources Power Platform (Microsoft) Workato Samples, Templates and Solutions Power Platform (Microsoft) Workato Community Power Platform (Microsoft) Workato Blogs Power Platform (Microsoft) Workato Other Lists Power Platform (Microsoft)" + }, + { + "category": "Awesome Low Code", + "url": "#contents", + "name": "Contents", + "desc": "Contents" + }, + { + "category": "Awesome Low Code", + "url": "#platforms", + "name": "Platforms", + "desc": "Platforms Citizen Automation and Development Platform Low Code Application Platform Business Process Management Robotic Process Automation Intelligent Virtual Agent Integration Platform as a Service Low Code API Management Platform" + }, + { + "category": "Platforms", + "url": "#citizen-automation-and-development-platform", + "name": "Citizen Automation and Development Platform", + "desc": "Citizen Automation and Development Platform" + }, + { + "category": "Platforms", + "url": "#low-code-application-platform", + "name": "Low Code Application Platform", + "desc": "Low Code Application Platform" + }, + { + "category": "Platforms", + "url": "#business-process-management", + "name": "Business Process Management", + "desc": "Business Process Management" + }, + { + "category": "Platforms", + "url": "#robotic-process-automation", + "name": "Robotic Process Automation", + "desc": "Robotic Process Automation" + }, + { + "category": "Platforms", + "url": "#intelligent-virtual-agent", + "name": "Intelligent Virtual Agent", + "desc": "Intelligent Virtual Agent" + }, + { + "category": "Platforms", + "url": "#integration-platform-as-a-service", + "name": "Integration Platform as a Service", + "desc": "Integration Platform as a Service" + }, + { + "category": "Platforms", + "url": "#low-code-api-management-platform", + "name": "Low Code API Management Platform", + "desc": "Low Code API Management Platform" + }, + { + "category": "Awesome Low Code", + "url": "#tools-extensions-and-frameworks", + "name": "Tools, Extensions and Frameworks", + "desc": "Tools, Extensions and Frameworks Power Platform (Microsoft)" + }, + { + "category": "Tools, Extensions and Frameworks", + "url": "#power-platform-microsoft", + "name": "Power Platform (Microsoft)", + "desc": "Power Platform (Microsoft)" + }, + { + "category": "Awesome Low Code", + "url": "#reference-resources", + "name": "Reference Resources", + "desc": "Reference Resources Power Platform (Microsoft) Workato" + }, + { + "category": "Reference Resources", + "url": "#power-platform-microsoft-1", + "name": "Power Platform (Microsoft)", + "desc": "Power Platform (Microsoft)" + }, + { + "category": "Reference Resources", + "url": "#workato", + "name": "Workato", + "desc": "Workato" + }, + { + "category": "Awesome Low Code", + "url": "#learning-resources", + "name": "Learning Resources", + "desc": "Learning Resources Power Platform (Microsoft) Workato" + }, + { + "category": "Learning Resources", + "url": "#power-platform-microsoft-2", + "name": "Power Platform (Microsoft)", + "desc": "Power Platform (Microsoft)" + }, + { + "category": "Learning Resources", + "url": "#workato-1", + "name": "Workato", + "desc": "Workato" + }, + { + "category": "Awesome Low Code", + "url": "#samples-templates-and-solutions", + "name": "Samples, Templates and Solutions", + "desc": "Samples, Templates and Solutions Power Platform (Microsoft) Workato" + }, + { + "category": "Samples, Templates and Solutions", + "url": "#power-platform-microsoft-3", + "name": "Power Platform (Microsoft)", + "desc": "Power Platform (Microsoft)" + }, + { + "category": "Samples, Templates and Solutions", + "url": "#workato-2", + "name": "Workato", + "desc": "Workato" + }, + { + "category": "Awesome Low Code", + "url": "#community", + "name": "Community", + "desc": "Community Power Platform (Microsoft) Workato" + }, + { + "category": "Community", + "url": "#power-platform-microsoft-4", + "name": "Power Platform (Microsoft)", + "desc": "Power Platform (Microsoft)" + }, + { + "category": "Community", + "url": "#workato-3", + "name": "Workato", + "desc": "Workato" + }, + { + "category": "Awesome Low Code", + "url": "#blogs", + "name": "Blogs", + "desc": "Blogs Power Platform (Microsoft) Workato" + }, + { + "category": "Blogs", + "url": "#power-platform-microsoft-5", + "name": "Power Platform (Microsoft)", + "desc": "Power Platform (Microsoft)" + }, + { + "category": "Blogs", + "url": "#workato-4", + "name": "Workato", + "desc": "Workato" + }, + { + "category": "Awesome Low Code", + "url": "#other-lists", + "name": "Other Lists", + "desc": "Other Lists Power Platform (Microsoft)" + }, + { + "category": "Other Lists", + "url": "#power-platform-microsoft-6", + "name": "Power Platform (Microsoft)", + "desc": "Power Platform (Microsoft)" + }, + { + "category": "A development platform for business users (citizen developer is a term for business users, not a role or a job title) that doesn't require coding skills and is based on intuitive drag & drop interfaces. Applications created in such platforms are usually made to automate or improve efficiency of business processes and of personal productivity, without going through IT. CADP are usually consumed as SaaS.", + "url": "https://flow.microsoft.com/", + "name": "Power Automate (Microsoft)", + "desc": "Power Automate (Microsoft) - An online workflow service that automates actions across the most common apps and services." + }, + { + "category": "A development platform for business users (citizen developer is a term for business users, not a role or a job title) that doesn't require coding skills and is based on intuitive drag & drop interfaces. Applications created in such platforms are usually made to automate or improve efficiency of business processes and of personal productivity, without going through IT. CADP are usually consumed as SaaS.", + "url": "https://zapier.com/", + "name": "Zapier", + "desc": "Zapier - Allows its users to easily connect and automate the apps they use." + }, + { + "category": "A development platform for business users (citizen developer is a term for business users, not a role or a job title) that doesn't require coding skills and is based on intuitive drag & drop interfaces. Applications created in such platforms are usually made to automate or improve efficiency of business processes and of personal productivity, without going through IT. CADP are usually consumed as SaaS.", + "url": "https://www.salesforce.com/products/platform/einstein-automate/", + "name": "Einstein Automate (Salesforce)", + "desc": "Einstein Automate (Salesforce) - Empower your employees to do more of what matters by automating business processes easily without needing specialized development skills." + }, + { + "category": "A development platform for business users (citizen developer is a term for business users, not a role or a job title) that doesn't require coding skills and is based on intuitive drag & drop interfaces. Applications created in such platforms are usually made to automate or improve efficiency of business processes and of personal productivity, without going through IT. CADP are usually consumed as SaaS.", + "url": "https://www.atlassian.com/software/jira/features/automation", + "name": "Jira Automation (Atlassian)", + "desc": "Jira Automation (Atlassian) - Automation is a No Code rule builder that enables customers to build if-this-then-that-rules based on events in Jira." + }, + { + "category": "A development platform for business users (citizen developer is a term for business users, not a role or a job title) that doesn't require coding skills and is based on intuitive drag & drop interfaces. Applications created in such platforms are usually made to automate or improve efficiency of business processes and of personal productivity, without going through IT. CADP are usually consumed as SaaS.", + "url": "https://trello.com/power-ups/category/automation", + "name": "Trello Power-Ups (Atlassian)", + "desc": "Trello Power-Ups (Atlassian) - Helps teams meet their unique business needs through adaptable features and integrations." + }, + { + "category": "A development platform for business users (citizen developer is a term for business users, not a role or a job title) that doesn't require coding skills and is based on intuitive drag & drop interfaces. Applications created in such platforms are usually made to automate or improve efficiency of business processes and of personal productivity, without going through IT. CADP are usually consumed as SaaS.", + "url": "https://www.zoho.com/flow/", + "name": "Flow (Zoho)", + "desc": "Flow (Zoho) - An integration platform that helps you connect your apps without any code." + }, + { + "category": "An advanced development platform that enable organizations to create powerful enterprise grade applications with no to minimum extra coding requirements with easy to use drag & drop interfaces. Since such platforms simplify the application development process, more types of personas can contribute and accelerate the development process. Those platforms are PaaS development platforms, and can also reduce development cost and maintenance.", + "url": "https://powerapps.com/", + "name": "Power Apps (Microsoft)", + "desc": "Power Apps (Microsoft) - Build apps in hours—not months—that easily connect to data, use Excel-like expressions to add logic, and run on the web, iOS, and Android devices." + }, + { + "category": "An advanced development platform that enable organizations to create powerful enterprise grade applications with no to minimum extra coding requirements with easy to use drag & drop interfaces. Since such platforms simplify the application development process, more types of personas can contribute and accelerate the development process. Those platforms are PaaS development platforms, and can also reduce development cost and maintenance.", + "url": "https://powerbi.microsoft.com/", + "name": "Power BI", + "desc": "Power BI - Unify data from many sources to create interactive, immersive dashboards and reports that provide actionable insights and drive business results." + }, + { + "category": "An advanced development platform that enable organizations to create powerful enterprise grade applications with no to minimum extra coding requirements with easy to use drag & drop interfaces. Since such platforms simplify the application development process, more types of personas can contribute and accelerate the development process. Those platforms are PaaS development platforms, and can also reduce development cost and maintenance.", + "url": "https://appian.com/", + "name": "Appian", + "desc": "Appian - Provides a Low Code software development platform that enables organizations to rapidly develop powerful applications." + }, + { + "category": "An advanced development platform that enable organizations to create powerful enterprise grade applications with no to minimum extra coding requirements with easy to use drag & drop interfaces. Since such platforms simplify the application development process, more types of personas can contribute and accelerate the development process. Those platforms are PaaS development platforms, and can also reduce development cost and maintenance.", + "url": "https://mendix.com/", + "name": "Mendix", + "desc": "Mendix - The fastest and easiest high-productivity platform to create and continuously improve multi-channel applications at scale." + }, + { + "category": "An advanced development platform that enable organizations to create powerful enterprise grade applications with no to minimum extra coding requirements with easy to use drag & drop interfaces. Since such platforms simplify the application development process, more types of personas can contribute and accelerate the development process. Those platforms are PaaS development platforms, and can also reduce development cost and maintenance.", + "url": "https://www.outsystems.com/", + "name": "OutSystems", + "desc": "OutSystems - A Low Code platform that enables businesses to develop, deploy, and manage enterprise-grade apps." + }, + { + "category": "An advanced development platform that enable organizations to create powerful enterprise grade applications with no to minimum extra coding requirements with easy to use drag & drop interfaces. Since such platforms simplify the application development process, more types of personas can contribute and accelerate the development process. Those platforms are PaaS development platforms, and can also reduce development cost and maintenance.", + "url": "https://www.servicenow.com/now-platform.html", + "name": "Now Platform (ServiceNow)", + "desc": "Now Platform (ServiceNow) - Drive connected digital workflows across the enterprise, deliver modern, consumer-like experiences, and accelerate time-to-value and innovation." + }, + { + "category": "An advanced development platform that enable organizations to create powerful enterprise grade applications with no to minimum extra coding requirements with easy to use drag & drop interfaces. Since such platforms simplify the application development process, more types of personas can contribute and accelerate the development process. Those platforms are PaaS development platforms, and can also reduce development cost and maintenance.", + "url": "https://www.zoho.com/creator/low-code-platform/", + "name": "Creator (Zoho)", + "desc": "Creator (Zoho) - Build applications from scratch without having to write endless lines of code." + }, + { + "category": "An advanced development platform that enable organizations to create powerful enterprise grade applications with no to minimum extra coding requirements with easy to use drag & drop interfaces. Since such platforms simplify the application development process, more types of personas can contribute and accelerate the development process. Those platforms are PaaS development platforms, and can also reduce development cost and maintenance.", + "url": "https://www.bettyblocks.com/", + "name": "BettyBlocks", + "desc": "BettyBlocks - The #1 No Code platform for innovation, agility and empowerment. Used to create mobile, business and web applications at lightning speed." + }, + { + "category": "An advanced development platform that enable organizations to create powerful enterprise grade applications with no to minimum extra coding requirements with easy to use drag & drop interfaces. Since such platforms simplify the application development process, more types of personas can contribute and accelerate the development process. Those platforms are PaaS development platforms, and can also reduce development cost and maintenance.", + "url": "https://apex.oracle.com/en/platform/low-code/", + "name": "APEX (Oracle)", + "desc": "APEX (Oracle) - A Low Code development platform that enables you to build scalable, secure enterprise apps, with world-class features, that can be deployed anywhere." + }, + { + "category": "An advanced development platform that enable organizations to create powerful enterprise grade applications with no to minimum extra coding requirements with easy to use drag & drop interfaces. Since such platforms simplify the application development process, more types of personas can contribute and accelerate the development process. Those platforms are PaaS development platforms, and can also reduce development cost and maintenance.", + "url": "https://www.salesforce.com/products/platform", + "name": "Salesforce Platform, prev. Force.com (Salesforce)", + "desc": "Salesforce Platform, prev. Force.com (Salesforce) - Click, create, and ship from anywhere with Low Code." + }, + { + "category": "An advanced development platform that enable organizations to create powerful enterprise grade applications with no to minimum extra coding requirements with easy to use drag & drop interfaces. Since such platforms simplify the application development process, more types of personas can contribute and accelerate the development process. Those platforms are PaaS development platforms, and can also reduce development cost and maintenance.", + "url": "https://n8n.io/", + "name": "n8n", + "desc": "n8n - Workflow automation tool with many integrations and with fair-code license." + }, + { + "category": "A Low Code Application Platform dedicated to streamlining business processes. These platforms enable business users to automate complicated business workflows and actions with no coding background by providing an easy to use drag & drop interface. Automations that are built in such platforms are usually built in an event-driven mode (triggers) around critical business processes. BPA can be consumed via a SaaS or an on-premises appliance.", + "url": "https://www.pega.com/", + "name": "PegaSystems", + "desc": "PegaSystems - Provides business process and customer relationship management solutions for organizations." + }, + { + "category": "A Low Code Application Platform dedicated to streamlining business processes. These platforms enable business users to automate complicated business workflows and actions with no coding background by providing an easy to use drag & drop interface. Automations that are built in such platforms are usually built in an event-driven mode (triggers) around critical business processes. BPA can be consumed via a SaaS or an on-premises appliance.", + "url": "https://agilepoint.com/", + "name": "AgilePoint", + "desc": "AgilePoint - Deploy business-changing ideas in minutes, not months, with the AgilePoint digital process automation platform." + }, + { + "category": "A Low Code Application Platform dedicated to streamlining business processes. These platforms enable business users to automate complicated business workflows and actions with no coding background by providing an easy to use drag & drop interface. Automations that are built in such platforms are usually built in an event-driven mode (triggers) around critical business processes. BPA can be consumed via a SaaS or an on-premises appliance.", + "url": "https://www.quickbase.com/", + "name": "QuickBase", + "desc": "QuickBase - Helps businesses quickly turn ideas about better ways to work into apps that make them more efficient, informed, and productive." + }, + { + "category": "A Low Code Application Platform dedicated to streamlining business processes. These platforms enable business users to automate complicated business workflows and actions with no coding background by providing an easy to use drag & drop interface. Automations that are built in such platforms are usually built in an event-driven mode (triggers) around critical business processes. BPA can be consumed via a SaaS or an on-premises appliance.", + "url": "https://www.creatio.com/", + "name": "Creatio", + "desc": "Creatio - A global software company providing a leading Low Code platform for process management and CRM." + }, + { + "category": "A Low Code Application Platform dedicated to streamlining business processes. These platforms enable business users to automate complicated business workflows and actions with no coding background by providing an easy to use drag & drop interface. Automations that are built in such platforms are usually built in an event-driven mode (triggers) around critical business processes. BPA can be consumed via a SaaS or an on-premises appliance.", + "url": "https://www.auraquantic.com/", + "name": "AuraQuantic", + "desc": "AuraQuantic - A digital platform designed for business users to easily and rapidly build unlimited processes and applications." + }, + { + "category": "A Low Code Application Platform dedicated to streamlining business processes. These platforms enable business users to automate complicated business workflows and actions with no coding background by providing an easy to use drag & drop interface. Automations that are built in such platforms are usually built in an event-driven mode (triggers) around critical business processes. BPA can be consumed via a SaaS or an on-premises appliance.", + "url": "https://www.kintone.com/", + "name": "Kintone", + "desc": "Kintone - The best productivity software to business transformation Platform." + }, + { + "category": "A Low Code Application Platform dedicated to streamlining business processes. These platforms enable business users to automate complicated business workflows and actions with no coding background by providing an easy to use drag & drop interface. Automations that are built in such platforms are usually built in an event-driven mode (triggers) around critical business processes. BPA can be consumed via a SaaS or an on-premises appliance.", + "url": "https://www.prontoforms.com/", + "name": "ProntoForms", + "desc": "ProntoForms - Provides mobile business solutions to automate field sales, field service, and field data collection." + }, + { + "category": "A Low Code Application Platform dedicated to streamlining business processes. These platforms enable business users to automate complicated business workflows and actions with no coding background by providing an easy to use drag & drop interface. Automations that are built in such platforms are usually built in an event-driven mode (triggers) around critical business processes. BPA can be consumed via a SaaS or an on-premises appliance.", + "url": "https://trackvia.com/", + "name": "TrackVia", + "desc": "TrackVia - The leading Low Code workflow platform for operations." + }, + { + "category": "A Low Code Application Platform dedicated to streamlining business processes. These platforms enable business users to automate complicated business workflows and actions with no coding background by providing an easy to use drag & drop interface. Automations that are built in such platforms are usually built in an event-driven mode (triggers) around critical business processes. BPA can be consumed via a SaaS or an on-premises appliance.", + "url": "https://newgensoft.com/", + "name": "NewGen", + "desc": "NewGen - Simplify your complex, content-driven business needs with one comprehensive Low Code platform." + }, + { + "category": "An automation platform that helps organizations remove human manual intensive processes and avoid errors, as well as making sure human required attention is efficiently maximized only on critical aspects of work. RPA technology introduced the concept of software robots, built by the end-user humans, to perform repetitive manual intensive processes in an automation fashion, and can understand and processes computer interactions with SaaS and on-premises applications just like a human-being. RPA technologies involve building, deploying, and managing those software robots.", + "url": "https://powerautomate.microsoft.com/en-us/robotic-process-automation/", + "name": "Power Automate Desktop (Microsoft)", + "desc": "Power Automate Desktop (Microsoft) - Automate everything from simple data transfers to complex business workflows—directly from your desktop—using RPA desktop flows in Power Automate Desktop." + }, + { + "category": "An automation platform that helps organizations remove human manual intensive processes and avoid errors, as well as making sure human required attention is efficiently maximized only on critical aspects of work. RPA technology introduced the concept of software robots, built by the end-user humans, to perform repetitive manual intensive processes in an automation fashion, and can understand and processes computer interactions with SaaS and on-premises applications just like a human-being. RPA technologies involve building, deploying, and managing those software robots.", + "url": "https://www.servicetrace.com/", + "name": "Servicetrace RPA (Salesforce)", + "desc": "Servicetrace RPA (Salesforce) - Develop innovation in robotic solutions." + }, + { + "category": "An automation platform that helps organizations remove human manual intensive processes and avoid errors, as well as making sure human required attention is efficiently maximized only on critical aspects of work. RPA technology introduced the concept of software robots, built by the end-user humans, to perform repetitive manual intensive processes in an automation fashion, and can understand and processes computer interactions with SaaS and on-premises applications just like a human-being. RPA technologies involve building, deploying, and managing those software robots.", + "url": "https://appian.com/platform/complete-automation/robotic-process-automation-rpa.html", + "name": "Appian RPA", + "desc": "Appian RPA - Orchestrate RPA bots with people, systems, and data in a single workflow, scaling automation across your entire organization." + }, + { + "category": "An automation platform that helps organizations remove human manual intensive processes and avoid errors, as well as making sure human required attention is efficiently maximized only on critical aspects of work. RPA technology introduced the concept of software robots, built by the end-user humans, to perform repetitive manual intensive processes in an automation fashion, and can understand and processes computer interactions with SaaS and on-premises applications just like a human-being. RPA technologies involve building, deploying, and managing those software robots.", + "url": "https://www.workato.com/modern-rpa", + "name": "Workato RPA", + "desc": "Workato RPA - Integration-powered RPA for Intelligent Automation." + }, + { + "category": "A software application which is built and configured by its users to perform manual repetitive and error-prone tasks in an automated faster fashion. Bots are built and configured mostly in Low Code platforms via easy to use drag & drop interfaces. Examples to the use of bots could be seen in user conversation via messaging and voice platforms that help them take decisions and act through business processes.", + "url": "https://powervirtualagents.microsoft.com/", + "name": "Power Virtual Agents (Microsoft)", + "desc": "Power Virtual Agents (Microsoft) - Lets you create powerful chatbots that can answer questions posed by your customers, other employees, or visitors to your website or service." + }, + { + "category": "A software application which is built and configured by its users to perform manual repetitive and error-prone tasks in an automated faster fashion. Bots are built and configured mostly in Low Code platforms via easy to use drag & drop interfaces. Examples to the use of bots could be seen in user conversation via messaging and voice platforms that help them take decisions and act through business processes.", + "url": "https://docs.workato.com/workbot/overview.html", + "name": "Workato Workbot", + "desc": "Workato Workbot - A bot platform that allows you to build customizable workflows." + }, + { + "category": "A platform that help organizations control, simplify and standardize the way that applications are integrated (internally developed or 3rd party SaaS). Such platforms help to share data between applications, automate business workflows and remove manual error prone ones, in an advanced controlled manner. iPaaS also enables more types of personas to integrate applications, removing the constant dependency on software developers. iPaaS can be deployed within an organization either as a SaaS or as on-premises appliance.", + "url": "https://azure.microsoft.com/en-us/services/logic-apps/", + "name": "Azure Logic Apps (Microsoft)", + "desc": "Azure Logic Apps (Microsoft) - A cloud-based platform for creating and running automated workflows that integrate your apps, data, services, and systems." + }, + { + "category": "A platform that help organizations control, simplify and standardize the way that applications are integrated (internally developed or 3rd party SaaS). Such platforms help to share data between applications, automate business workflows and remove manual error prone ones, in an advanced controlled manner. iPaaS also enables more types of personas to integrate applications, removing the constant dependency on software developers. iPaaS can be deployed within an organization either as a SaaS or as on-premises appliance.", + "url": "https://mulesoft.com/", + "name": "MuleSoft (Salesforce)", + "desc": "MuleSoft (Salesforce) - Provides an integration and API platform that makes it easy to connect data from any system to create connected experiences." + }, + { + "category": "A platform that help organizations control, simplify and standardize the way that applications are integrated (internally developed or 3rd party SaaS). Such platforms help to share data between applications, automate business workflows and remove manual error prone ones, in an advanced controlled manner. iPaaS also enables more types of personas to integrate applications, removing the constant dependency on software developers. iPaaS can be deployed within an organization either as a SaaS or as on-premises appliance.", + "url": "https://www.workato.com", + "name": "Workato", + "desc": "Workato - An enterprise automation platform that helps organizations work faster and smarter without compromising governance and security." + }, + { + "category": "A Low Code platform which supports full lifecycle API management, including creation, management and monitoring of API endpoints.", + "url": "https://www.mulesoft.com/platform/api-management", + "name": "MuleSoft", + "desc": "MuleSoft - Manage your API lifecycle, quickly design, test, and publish APIs." + }, + { + "category": "A Low Code platform which supports full lifecycle API management, including creation, management and monitoring of API endpoints.", + "url": "https://docs.workato.com/api-management.html", + "name": "Workato API Management", + "desc": "Workato API Management - Turn callable recipes into endpoints and organize the endpoints into API collections, making it easier for users to find and consume the endpoints through other recipes or third-party apps, without requiring access to your Workato account." + }, + { + "category": "Power Platform (Microsoft)", + "url": "https://github.com/MscrmTools/XrmToolBox", + "name": "XrmToolBox", + "desc": "XrmToolBox - An application that gather multiple tools to ease the customization and configuration of Microsoft Dynamics CRM/365/Dataverse/PowerApps." + }, + { + "category": "Power Platform (Microsoft)", + "url": "https://github.com/rajyraman/Levelup-for-Dynamics-CRM", + "name": "Levelup for Dynamics CRM", + "desc": "Levelup for Dynamics CRM - Chrome, Edge Chromium and Firefox Extension for Dynamics CRM/365/Power Apps Power users." + }, + { + "category": "Power Platform (Microsoft)", + "url": "https://github.com/PowerPlatformAF/PowerPlatformAF", + "name": "Power Platform Adoption Framework", + "desc": "Power Platform Adoption Framework - The framework that enables people to create beautiful and useful things on Power Platform deployed in large, enterprise-grade organizations." + }, + { + "category": "Power Platform (Microsoft)", + "url": "https://github.com/Zerg00s/FlowPowerAppsMigrator", + "name": "Flow & Power Apps Migrator", + "desc": "Flow & Power Apps Migrator - Converts SharePoint Data sources for the MS Flow and PowerApps to a new tenant of your choice." + }, + { + "category": "Power Platform (Microsoft)", + "url": "https://github.com/TracyGH/SharePointWorkflowConverter", + "name": "SharePoint Workflow Converter", + "desc": "SharePoint Workflow Converter - A proof-of-concept C# console application for retrieving legacy 2010 & 2013 custom SharePoint workflow definition files, and creating new Power Automate flows programmatically." + }, + { + "category": "Power Platform (Microsoft)", + "url": "https://github.com/microsoft/PowerPlatformConnectors", + "name": "Power Platform Connectors", + "desc": "Power Platform Connectors - This is a repository for Microsoft Power Automate, Power Apps, and Azure Logic Apps connectors." + }, + { + "category": "Power Platform (Microsoft)", + "url": "https://github.com/microsoft/Power-Fx", + "name": "Microsoft Power Fx", + "desc": "Microsoft Power Fx - Power Fx Low Code programming language." + }, + { + "category": "Workato", + "url": "https://github.com/workato/custom_connector_docs", + "name": "Custom Connector Docs", + "desc": "Custom Connector Docs - Source files for Workato custom connector documentation." + }, + { + "category": "Power Platform (Microsoft)", + "url": "https://github.com/pnp/powerfx-samples", + "name": "Power Fx Samples", + "desc": "Power Fx Samples - This repository contains samples for Power Fx Low Code programming language." + }, + { + "category": "Power Platform (Microsoft)", + "url": "https://github.com/microsoft/PowerApps-Azure-Lab", + "name": "Power Apps & Azure Lab", + "desc": "Power Apps & Azure Lab - Repository to host the PowerApps Azure Lab." + }, + { + "category": "Power Platform (Microsoft)", + "url": "https://github.com/MicrosoftLearning/PL-900-Microsoft-Power-Platform-Fundamentals", + "name": "PL-900: Power Platform Fundamentals", + "desc": "PL-900: Power Platform Fundamentals - Power Platform Fundamentals course materials." + }, + { + "category": "Workato", + "url": "https://github.com/workato/full-embed-sample", + "name": "Embedding Guide", + "desc": "Embedding Guide - A guided example on how to use Workato embedded." + }, + { + "category": "Power Platform (Microsoft)", + "url": "https://github.com/pnp/powerapps-samples", + "name": "Power Apps Samples", + "desc": "Power Apps Samples - Contains curated community Microsoft Power App samples." + }, + { + "category": "Power Platform (Microsoft)", + "url": "https://github.com/Eickhel/PowerApps-samples", + "name": "PowerApps Samples", + "desc": "PowerApps Samples - Power Apps samples by Power Nimbus." + }, + { + "category": "Power Platform (Microsoft)", + "url": "https://github.com/iAmManCat/PowerApps-Branding-Template", + "name": "Power Apps Branding Template", + "desc": "Power Apps Branding Template - A template to empower developers and reduce time wasted on control changes." + }, + { + "category": "Power Platform (Microsoft)", + "url": "https://github.com/pnp/sp-power-platform-solutions", + "name": "SharePoint Power Platform Solutions", + "desc": "SharePoint Power Platform Solutions - Sample PowerApps solutions designed to be used in SharePoint context." + }, + { + "category": "Power Platform (Microsoft)", + "url": "https://github.com/pnp/powerautomate-samples", + "name": "Power Automate Samples", + "desc": "Power Automate Samples - Contains curated community samples for Microsoft Power Automate." + }, + { + "category": "Power Platform (Microsoft)", + "url": "https://github.com/wortell/PowerAutomate-AutomatischeReistijd", + "name": "Automatic travel time", + "desc": "Automatic travel time - Automatic travel time in your Office 365 calendar." + }, + { + "category": "Power Platform (Microsoft)", + "url": "https://github.com/ericsche/MCinTeams", + "name": "Message Center in Teams", + "desc": "Message Center in Teams - Message Center in Teams is a simple PowerAutomate Solution to gather Message Center Announcement and post them in a Teams Channel." + }, + { + "category": "Power Platform (Microsoft)", + "url": "https://github.com/ferrybouwman/Power-BI-Read-Only-REST-API", + "name": "Consume Power BI", + "desc": "Consume Power BI - Solution based on either Powershell or Power Automate (Flow) to consume the recently released Power BI Asynchronous Unified Scanning API." + }, + { + "category": "Power Platform (Microsoft)", + "url": "https://github.com/vaibhav21791/PostListItemToTwitter", + "name": "Post List Item To Twitter", + "desc": "Post List Item To Twitter - A Microsoft Power Automate Flow to Post a SharePoint List Item to Twitter along with media content." + }, + { + "category": "Workato", + "url": "https://www.workato.com/solutions", + "name": "Solution Marketplace", + "desc": "Solution Marketplace - A curated list of ready-to-use solutions built by Workato and vendors." + }, + { + "category": "Workato", + "url": "https://support.workato.com/en/support/solutions", + "name": "Support History", + "desc": "Support History - A public repository of resolved support tickets to help tackle issues." + }, + { + "category": "Power Platform (Microsoft)", + "url": "https://powerusers.microsoft.com/t5/Power-Apps-Community/ct-p/PowerApps1", + "name": "Microsoft Power Apps Official Community", + "desc": "Microsoft Power Apps Official Community" + }, + { + "category": "Power Platform (Microsoft)", + "url": "https://powerusers.microsoft.com/t5/Microsoft-Power-Automate/ct-p/MPACommunity", + "name": "Microsoft Power Automate Official Community", + "desc": "Microsoft Power Automate Official Community" + }, + { + "category": "Power Platform (Microsoft)", + "url": "https://powerusers.microsoft.com/t5/Power-Virtual-Agents-Community/ct-p/PVACommunity", + "name": "Microsoft Power Virtual Agents Official Community", + "desc": "Microsoft Power Virtual Agents Official Community" + }, + { + "category": "Power Platform (Microsoft)", + "url": "https://community.powerbi.com/", + "name": "Microsoft Power BI Official Community", + "desc": "Microsoft Power BI Official Community" + }, + { + "category": "Power Platform (Microsoft)", + "url": "https://powp.co/", + "name": "PowP.Co Discord Community", + "desc": "PowP.Co Discord Community - A Discord community of Power Platform enthusiasts." + }, + { + "category": "Workato", + "url": "https://community.workato.com/", + "name": "Workato Communities", + "desc": "Workato Communities - The official Workato communities website." + }, + { + "category": "Workato", + "url": "https://systematic.workato.com/", + "name": "Systematic", + "desc": "Systematic - The only community for business systems." + }, + { + "category": "Power Platform (Microsoft)", + "url": "https://zenity.io/blog", + "name": "Zenity", + "desc": "Zenity - Low Code security and governance." + }, + { + "category": "Power Platform (Microsoft)", + "url": "https://www.darkreading.com/edge-articles/addressing-the-low-code-security-elephant-in-the-room", + "name": "Addressing the Low Code Security Elephant in the Room", + "desc": "Addressing the Low Code Security Elephant in the Room - The shared responsibility model for Low Code applications." + }, + { + "category": "Power Platform (Microsoft)", + "url": "https://blog.powp.co/", + "name": "PowPco", + "desc": "PowPco - Single-stop community for everything Power Platform Community related." + }, + { + "category": "Workato", + "url": "https://www.workato.com/the-connector/", + "name": "The Connector", + "desc": "The Connector - Workato blog on Business Automation." + }, + { + "category": "Power Platform (Microsoft)", + "url": "https://github.com/Power-Maverick/awesome-power-platform", + "name": "Awesome Microsoft Power Platform", + "desc": "Awesome Microsoft Power Platform - A collection of awesome things regarding the Power Platform ecosystem." + }, + { + "category": "Power Platform (Microsoft)", + "url": "https://github.com/valentin-vogel/awesome-nocode-lowcode", + "name": "Awesome No Code Low Code", + "desc": "Awesome No Code Low Code - A collection of awesome No Code and Low Code resources." + } +] +[ + { + "category": "Contents", + "url": "#awesome-low-code-", + "name": "Awesome Low Code", + "desc": "Awesome Low Code Contents Platforms Citizen Automation and Development Platform Low Code Application Platform Business Process Management Robotic Process Automation Intelligent Virtual Agent Integration Platform as a Service Low Code API Management Platform Tools, Extensions and Frameworks Power Platform (Microsoft) Reference Resources Power Platform (Microsoft) Workato Learning Resources Power Platform (Microsoft) Workato Samples, Templates and Solutions Power Platform (Microsoft) Workato Community Power Platform (Microsoft) Workato Blogs Power Platform (Microsoft) Workato Other Lists Power Platform (Microsoft)" + }, + { + "category": "Awesome Low Code", + "url": "#contents", + "name": "Contents", + "desc": "Contents" + }, + { + "category": "Awesome Low Code", + "url": "#platforms", + "name": "Platforms", + "desc": "Platforms Citizen Automation and Development Platform Low Code Application Platform Business Process Management Robotic Process Automation Intelligent Virtual Agent Integration Platform as a Service Low Code API Management Platform" + }, + { + "category": "Platforms", + "url": "#citizen-automation-and-development-platform", + "name": "Citizen Automation and Development Platform", + "desc": "Citizen Automation and Development Platform" + }, + { + "category": "Platforms", + "url": "#low-code-application-platform", + "name": "Low Code Application Platform", + "desc": "Low Code Application Platform" + }, + { + "category": "Platforms", + "url": "#business-process-management", + "name": "Business Process Management", + "desc": "Business Process Management" + }, + { + "category": "Platforms", + "url": "#robotic-process-automation", + "name": "Robotic Process Automation", + "desc": "Robotic Process Automation" + }, + { + "category": "Platforms", + "url": "#intelligent-virtual-agent", + "name": "Intelligent Virtual Agent", + "desc": "Intelligent Virtual Agent" + }, + { + "category": "Platforms", + "url": "#integration-platform-as-a-service", + "name": "Integration Platform as a Service", + "desc": "Integration Platform as a Service" + }, + { + "category": "Platforms", + "url": "#low-code-api-management-platform", + "name": "Low Code API Management Platform", + "desc": "Low Code API Management Platform" + }, + { + "category": "Awesome Low Code", + "url": "#tools-extensions-and-frameworks", + "name": "Tools, Extensions and Frameworks", + "desc": "Tools, Extensions and Frameworks Power Platform (Microsoft)" + }, + { + "category": "Tools, Extensions and Frameworks", + "url": "#power-platform-microsoft", + "name": "Power Platform (Microsoft)", + "desc": "Power Platform (Microsoft)" + }, + { + "category": "Awesome Low Code", + "url": "#reference-resources", + "name": "Reference Resources", + "desc": "Reference Resources Power Platform (Microsoft) Workato" + }, + { + "category": "Reference Resources", + "url": "#power-platform-microsoft-1", + "name": "Power Platform (Microsoft)", + "desc": "Power Platform (Microsoft)" + }, + { + "category": "Reference Resources", + "url": "#workato", + "name": "Workato", + "desc": "Workato" + }, + { + "category": "Awesome Low Code", + "url": "#learning-resources", + "name": "Learning Resources", + "desc": "Learning Resources Power Platform (Microsoft) Workato" + }, + { + "category": "Learning Resources", + "url": "#power-platform-microsoft-2", + "name": "Power Platform (Microsoft)", + "desc": "Power Platform (Microsoft)" + }, + { + "category": "Learning Resources", + "url": "#workato-1", + "name": "Workato", + "desc": "Workato" + }, + { + "category": "Awesome Low Code", + "url": "#samples-templates-and-solutions", + "name": "Samples, Templates and Solutions", + "desc": "Samples, Templates and Solutions Power Platform (Microsoft) Workato" + }, + { + "category": "Samples, Templates and Solutions", + "url": "#power-platform-microsoft-3", + "name": "Power Platform (Microsoft)", + "desc": "Power Platform (Microsoft)" + }, + { + "category": "Samples, Templates and Solutions", + "url": "#workato-2", + "name": "Workato", + "desc": "Workato" + }, + { + "category": "Awesome Low Code", + "url": "#community", + "name": "Community", + "desc": "Community Power Platform (Microsoft) Workato" + }, + { + "category": "Community", + "url": "#power-platform-microsoft-4", + "name": "Power Platform (Microsoft)", + "desc": "Power Platform (Microsoft)" + }, + { + "category": "Community", + "url": "#workato-3", + "name": "Workato", + "desc": "Workato" + }, + { + "category": "Awesome Low Code", + "url": "#blogs", + "name": "Blogs", + "desc": "Blogs Power Platform (Microsoft) Workato" + }, + { + "category": "Blogs", + "url": "#power-platform-microsoft-5", + "name": "Power Platform (Microsoft)", + "desc": "Power Platform (Microsoft)" + }, + { + "category": "Blogs", + "url": "#workato-4", + "name": "Workato", + "desc": "Workato" + }, + { + "category": "Awesome Low Code", + "url": "#other-lists", + "name": "Other Lists", + "desc": "Other Lists Power Platform (Microsoft)" + }, + { + "category": "Other Lists", + "url": "#power-platform-microsoft-6", + "name": "Power Platform (Microsoft)", + "desc": "Power Platform (Microsoft)" + }, + { + "category": "A development platform for business users (citizen developer is a term for business users, not a role or a job title) that doesn't require coding skills and is based on intuitive drag & drop interfaces. Applications created in such platforms are usually made to automate or improve efficiency of business processes and of personal productivity, without going through IT. CADP are usually consumed as SaaS.", + "url": "https://flow.microsoft.com/", + "name": "Power Automate (Microsoft)", + "desc": "Power Automate (Microsoft) - An online workflow service that automates actions across the most common apps and services." + }, + { + "category": "A development platform for business users (citizen developer is a term for business users, not a role or a job title) that doesn't require coding skills and is based on intuitive drag & drop interfaces. Applications created in such platforms are usually made to automate or improve efficiency of business processes and of personal productivity, without going through IT. CADP are usually consumed as SaaS.", + "url": "https://zapier.com/", + "name": "Zapier", + "desc": "Zapier - Allows its users to easily connect and automate the apps they use." + }, + { + "category": "A development platform for business users (citizen developer is a term for business users, not a role or a job title) that doesn't require coding skills and is based on intuitive drag & drop interfaces. Applications created in such platforms are usually made to automate or improve efficiency of business processes and of personal productivity, without going through IT. CADP are usually consumed as SaaS.", + "url": "https://www.salesforce.com/products/platform/einstein-automate/", + "name": "Einstein Automate (Salesforce)", + "desc": "Einstein Automate (Salesforce) - Empower your employees to do more of what matters by automating business processes easily without needing specialized development skills." + }, + { + "category": "A development platform for business users (citizen developer is a term for business users, not a role or a job title) that doesn't require coding skills and is based on intuitive drag & drop interfaces. Applications created in such platforms are usually made to automate or improve efficiency of business processes and of personal productivity, without going through IT. CADP are usually consumed as SaaS.", + "url": "https://www.atlassian.com/software/jira/features/automation", + "name": "Jira Automation (Atlassian)", + "desc": "Jira Automation (Atlassian) - Automation is a No Code rule builder that enables customers to build if-this-then-that-rules based on events in Jira." + }, + { + "category": "A development platform for business users (citizen developer is a term for business users, not a role or a job title) that doesn't require coding skills and is based on intuitive drag & drop interfaces. Applications created in such platforms are usually made to automate or improve efficiency of business processes and of personal productivity, without going through IT. CADP are usually consumed as SaaS.", + "url": "https://trello.com/power-ups/category/automation", + "name": "Trello Power-Ups (Atlassian)", + "desc": "Trello Power-Ups (Atlassian) - Helps teams meet their unique business needs through adaptable features and integrations." + }, + { + "category": "A development platform for business users (citizen developer is a term for business users, not a role or a job title) that doesn't require coding skills and is based on intuitive drag & drop interfaces. Applications created in such platforms are usually made to automate or improve efficiency of business processes and of personal productivity, without going through IT. CADP are usually consumed as SaaS.", + "url": "https://www.zoho.com/flow/", + "name": "Flow (Zoho)", + "desc": "Flow (Zoho) - An integration platform that helps you connect your apps without any code." + }, + { + "category": "An advanced development platform that enable organizations to create powerful enterprise grade applications with no to minimum extra coding requirements with easy to use drag & drop interfaces. Since such platforms simplify the application development process, more types of personas can contribute and accelerate the development process. Those platforms are PaaS development platforms, and can also reduce development cost and maintenance.", + "url": "https://powerapps.com/", + "name": "Power Apps (Microsoft)", + "desc": "Power Apps (Microsoft) - Build apps in hours—not months—that easily connect to data, use Excel-like expressions to add logic, and run on the web, iOS, and Android devices." + }, + { + "category": "An advanced development platform that enable organizations to create powerful enterprise grade applications with no to minimum extra coding requirements with easy to use drag & drop interfaces. Since such platforms simplify the application development process, more types of personas can contribute and accelerate the development process. Those platforms are PaaS development platforms, and can also reduce development cost and maintenance.", + "url": "https://powerbi.microsoft.com/", + "name": "Power BI", + "desc": "Power BI - Unify data from many sources to create interactive, immersive dashboards and reports that provide actionable insights and drive business results." + }, + { + "category": "An advanced development platform that enable organizations to create powerful enterprise grade applications with no to minimum extra coding requirements with easy to use drag & drop interfaces. Since such platforms simplify the application development process, more types of personas can contribute and accelerate the development process. Those platforms are PaaS development platforms, and can also reduce development cost and maintenance.", + "url": "https://appian.com/", + "name": "Appian", + "desc": "Appian - Provides a Low Code software development platform that enables organizations to rapidly develop powerful applications." + }, + { + "category": "An advanced development platform that enable organizations to create powerful enterprise grade applications with no to minimum extra coding requirements with easy to use drag & drop interfaces. Since such platforms simplify the application development process, more types of personas can contribute and accelerate the development process. Those platforms are PaaS development platforms, and can also reduce development cost and maintenance.", + "url": "https://mendix.com/", + "name": "Mendix", + "desc": "Mendix - The fastest and easiest high-productivity platform to create and continuously improve multi-channel applications at scale." + }, + { + "category": "An advanced development platform that enable organizations to create powerful enterprise grade applications with no to minimum extra coding requirements with easy to use drag & drop interfaces. Since such platforms simplify the application development process, more types of personas can contribute and accelerate the development process. Those platforms are PaaS development platforms, and can also reduce development cost and maintenance.", + "url": "https://www.outsystems.com/", + "name": "OutSystems", + "desc": "OutSystems - A Low Code platform that enables businesses to develop, deploy, and manage enterprise-grade apps." + }, + { + "category": "An advanced development platform that enable organizations to create powerful enterprise grade applications with no to minimum extra coding requirements with easy to use drag & drop interfaces. Since such platforms simplify the application development process, more types of personas can contribute and accelerate the development process. Those platforms are PaaS development platforms, and can also reduce development cost and maintenance.", + "url": "https://www.servicenow.com/now-platform.html", + "name": "Now Platform (ServiceNow)", + "desc": "Now Platform (ServiceNow) - Drive connected digital workflows across the enterprise, deliver modern, consumer-like experiences, and accelerate time-to-value and innovation." + }, + { + "category": "An advanced development platform that enable organizations to create powerful enterprise grade applications with no to minimum extra coding requirements with easy to use drag & drop interfaces. Since such platforms simplify the application development process, more types of personas can contribute and accelerate the development process. Those platforms are PaaS development platforms, and can also reduce development cost and maintenance.", + "url": "https://www.zoho.com/creator/low-code-platform/", + "name": "Creator (Zoho)", + "desc": "Creator (Zoho) - Build applications from scratch without having to write endless lines of code." + }, + { + "category": "An advanced development platform that enable organizations to create powerful enterprise grade applications with no to minimum extra coding requirements with easy to use drag & drop interfaces. Since such platforms simplify the application development process, more types of personas can contribute and accelerate the development process. Those platforms are PaaS development platforms, and can also reduce development cost and maintenance.", + "url": "https://www.bettyblocks.com/", + "name": "BettyBlocks", + "desc": "BettyBlocks - The #1 No Code platform for innovation, agility and empowerment. Used to create mobile, business and web applications at lightning speed." + }, + { + "category": "An advanced development platform that enable organizations to create powerful enterprise grade applications with no to minimum extra coding requirements with easy to use drag & drop interfaces. Since such platforms simplify the application development process, more types of personas can contribute and accelerate the development process. Those platforms are PaaS development platforms, and can also reduce development cost and maintenance.", + "url": "https://apex.oracle.com/en/platform/low-code/", + "name": "APEX (Oracle)", + "desc": "APEX (Oracle) - A Low Code development platform that enables you to build scalable, secure enterprise apps, with world-class features, that can be deployed anywhere." + }, + { + "category": "An advanced development platform that enable organizations to create powerful enterprise grade applications with no to minimum extra coding requirements with easy to use drag & drop interfaces. Since such platforms simplify the application development process, more types of personas can contribute and accelerate the development process. Those platforms are PaaS development platforms, and can also reduce development cost and maintenance.", + "url": "https://www.salesforce.com/products/platform", + "name": "Salesforce Platform, prev. Force.com (Salesforce)", + "desc": "Salesforce Platform, prev. Force.com (Salesforce) - Click, create, and ship from anywhere with Low Code." + }, + { + "category": "An advanced development platform that enable organizations to create powerful enterprise grade applications with no to minimum extra coding requirements with easy to use drag & drop interfaces. Since such platforms simplify the application development process, more types of personas can contribute and accelerate the development process. Those platforms are PaaS development platforms, and can also reduce development cost and maintenance.", + "url": "https://n8n.io/", + "name": "n8n", + "desc": "n8n - Workflow automation tool with many integrations and with fair-code license." + }, + { + "category": "A Low Code Application Platform dedicated to streamlining business processes. These platforms enable business users to automate complicated business workflows and actions with no coding background by providing an easy to use drag & drop interface. Automations that are built in such platforms are usually built in an event-driven mode (triggers) around critical business processes. BPA can be consumed via a SaaS or an on-premises appliance.", + "url": "https://www.pega.com/", + "name": "PegaSystems", + "desc": "PegaSystems - Provides business process and customer relationship management solutions for organizations." + }, + { + "category": "A Low Code Application Platform dedicated to streamlining business processes. These platforms enable business users to automate complicated business workflows and actions with no coding background by providing an easy to use drag & drop interface. Automations that are built in such platforms are usually built in an event-driven mode (triggers) around critical business processes. BPA can be consumed via a SaaS or an on-premises appliance.", + "url": "https://agilepoint.com/", + "name": "AgilePoint", + "desc": "AgilePoint - Deploy business-changing ideas in minutes, not months, with the AgilePoint digital process automation platform." + }, + { + "category": "A Low Code Application Platform dedicated to streamlining business processes. These platforms enable business users to automate complicated business workflows and actions with no coding background by providing an easy to use drag & drop interface. Automations that are built in such platforms are usually built in an event-driven mode (triggers) around critical business processes. BPA can be consumed via a SaaS or an on-premises appliance.", + "url": "https://www.quickbase.com/", + "name": "QuickBase", + "desc": "QuickBase - Helps businesses quickly turn ideas about better ways to work into apps that make them more efficient, informed, and productive." + }, + { + "category": "A Low Code Application Platform dedicated to streamlining business processes. These platforms enable business users to automate complicated business workflows and actions with no coding background by providing an easy to use drag & drop interface. Automations that are built in such platforms are usually built in an event-driven mode (triggers) around critical business processes. BPA can be consumed via a SaaS or an on-premises appliance.", + "url": "https://www.creatio.com/", + "name": "Creatio", + "desc": "Creatio - A global software company providing a leading Low Code platform for process management and CRM." + }, + { + "category": "A Low Code Application Platform dedicated to streamlining business processes. These platforms enable business users to automate complicated business workflows and actions with no coding background by providing an easy to use drag & drop interface. Automations that are built in such platforms are usually built in an event-driven mode (triggers) around critical business processes. BPA can be consumed via a SaaS or an on-premises appliance.", + "url": "https://www.auraquantic.com/", + "name": "AuraQuantic", + "desc": "AuraQuantic - A digital platform designed for business users to easily and rapidly build unlimited processes and applications." + }, + { + "category": "A Low Code Application Platform dedicated to streamlining business processes. These platforms enable business users to automate complicated business workflows and actions with no coding background by providing an easy to use drag & drop interface. Automations that are built in such platforms are usually built in an event-driven mode (triggers) around critical business processes. BPA can be consumed via a SaaS or an on-premises appliance.", + "url": "https://www.kintone.com/", + "name": "Kintone", + "desc": "Kintone - The best productivity software to business transformation Platform." + }, + { + "category": "A Low Code Application Platform dedicated to streamlining business processes. These platforms enable business users to automate complicated business workflows and actions with no coding background by providing an easy to use drag & drop interface. Automations that are built in such platforms are usually built in an event-driven mode (triggers) around critical business processes. BPA can be consumed via a SaaS or an on-premises appliance.", + "url": "https://www.prontoforms.com/", + "name": "ProntoForms", + "desc": "ProntoForms - Provides mobile business solutions to automate field sales, field service, and field data collection." + }, + { + "category": "A Low Code Application Platform dedicated to streamlining business processes. These platforms enable business users to automate complicated business workflows and actions with no coding background by providing an easy to use drag & drop interface. Automations that are built in such platforms are usually built in an event-driven mode (triggers) around critical business processes. BPA can be consumed via a SaaS or an on-premises appliance.", + "url": "https://trackvia.com/", + "name": "TrackVia", + "desc": "TrackVia - The leading Low Code workflow platform for operations." + }, + { + "category": "A Low Code Application Platform dedicated to streamlining business processes. These platforms enable business users to automate complicated business workflows and actions with no coding background by providing an easy to use drag & drop interface. Automations that are built in such platforms are usually built in an event-driven mode (triggers) around critical business processes. BPA can be consumed via a SaaS or an on-premises appliance.", + "url": "https://newgensoft.com/", + "name": "NewGen", + "desc": "NewGen - Simplify your complex, content-driven business needs with one comprehensive Low Code platform." + }, + { + "category": "An automation platform that helps organizations remove human manual intensive processes and avoid errors, as well as making sure human required attention is efficiently maximized only on critical aspects of work. RPA technology introduced the concept of software robots, built by the end-user humans, to perform repetitive manual intensive processes in an automation fashion, and can understand and processes computer interactions with SaaS and on-premises applications just like a human-being. RPA technologies involve building, deploying, and managing those software robots.", + "url": "https://powerautomate.microsoft.com/en-us/robotic-process-automation/", + "name": "Power Automate Desktop (Microsoft)", + "desc": "Power Automate Desktop (Microsoft) - Automate everything from simple data transfers to complex business workflows—directly from your desktop—using RPA desktop flows in Power Automate Desktop." + }, + { + "category": "An automation platform that helps organizations remove human manual intensive processes and avoid errors, as well as making sure human required attention is efficiently maximized only on critical aspects of work. RPA technology introduced the concept of software robots, built by the end-user humans, to perform repetitive manual intensive processes in an automation fashion, and can understand and processes computer interactions with SaaS and on-premises applications just like a human-being. RPA technologies involve building, deploying, and managing those software robots.", + "url": "https://www.servicetrace.com/", + "name": "Servicetrace RPA (Salesforce)", + "desc": "Servicetrace RPA (Salesforce) - Develop innovation in robotic solutions." + }, + { + "category": "An automation platform that helps organizations remove human manual intensive processes and avoid errors, as well as making sure human required attention is efficiently maximized only on critical aspects of work. RPA technology introduced the concept of software robots, built by the end-user humans, to perform repetitive manual intensive processes in an automation fashion, and can understand and processes computer interactions with SaaS and on-premises applications just like a human-being. RPA technologies involve building, deploying, and managing those software robots.", + "url": "https://appian.com/platform/complete-automation/robotic-process-automation-rpa.html", + "name": "Appian RPA", + "desc": "Appian RPA - Orchestrate RPA bots with people, systems, and data in a single workflow, scaling automation across your entire organization." + }, + { + "category": "An automation platform that helps organizations remove human manual intensive processes and avoid errors, as well as making sure human required attention is efficiently maximized only on critical aspects of work. RPA technology introduced the concept of software robots, built by the end-user humans, to perform repetitive manual intensive processes in an automation fashion, and can understand and processes computer interactions with SaaS and on-premises applications just like a human-being. RPA technologies involve building, deploying, and managing those software robots.", + "url": "https://www.workato.com/modern-rpa", + "name": "Workato RPA", + "desc": "Workato RPA - Integration-powered RPA for Intelligent Automation." + }, + { + "category": "A software application which is built and configured by its users to perform manual repetitive and error-prone tasks in an automated faster fashion. Bots are built and configured mostly in Low Code platforms via easy to use drag & drop interfaces. Examples to the use of bots could be seen in user conversation via messaging and voice platforms that help them take decisions and act through business processes.", + "url": "https://powervirtualagents.microsoft.com/", + "name": "Power Virtual Agents (Microsoft)", + "desc": "Power Virtual Agents (Microsoft) - Lets you create powerful chatbots that can answer questions posed by your customers, other employees, or visitors to your website or service." + }, + { + "category": "A software application which is built and configured by its users to perform manual repetitive and error-prone tasks in an automated faster fashion. Bots are built and configured mostly in Low Code platforms via easy to use drag & drop interfaces. Examples to the use of bots could be seen in user conversation via messaging and voice platforms that help them take decisions and act through business processes.", + "url": "https://docs.workato.com/workbot/overview.html", + "name": "Workato Workbot", + "desc": "Workato Workbot - A bot platform that allows you to build customizable workflows." + }, + { + "category": "A platform that help organizations control, simplify and standardize the way that applications are integrated (internally developed or 3rd party SaaS). Such platforms help to share data between applications, automate business workflows and remove manual error prone ones, in an advanced controlled manner. iPaaS also enables more types of personas to integrate applications, removing the constant dependency on software developers. iPaaS can be deployed within an organization either as a SaaS or as on-premises appliance.", + "url": "https://azure.microsoft.com/en-us/services/logic-apps/", + "name": "Azure Logic Apps (Microsoft)", + "desc": "Azure Logic Apps (Microsoft) - A cloud-based platform for creating and running automated workflows that integrate your apps, data, services, and systems." + }, + { + "category": "A platform that help organizations control, simplify and standardize the way that applications are integrated (internally developed or 3rd party SaaS). Such platforms help to share data between applications, automate business workflows and remove manual error prone ones, in an advanced controlled manner. iPaaS also enables more types of personas to integrate applications, removing the constant dependency on software developers. iPaaS can be deployed within an organization either as a SaaS or as on-premises appliance.", + "url": "https://mulesoft.com/", + "name": "MuleSoft (Salesforce)", + "desc": "MuleSoft (Salesforce) - Provides an integration and API platform that makes it easy to connect data from any system to create connected experiences." + }, + { + "category": "A platform that help organizations control, simplify and standardize the way that applications are integrated (internally developed or 3rd party SaaS). Such platforms help to share data between applications, automate business workflows and remove manual error prone ones, in an advanced controlled manner. iPaaS also enables more types of personas to integrate applications, removing the constant dependency on software developers. iPaaS can be deployed within an organization either as a SaaS or as on-premises appliance.", + "url": "https://www.workato.com", + "name": "Workato", + "desc": "Workato - An enterprise automation platform that helps organizations work faster and smarter without compromising governance and security." + }, + { + "category": "A Low Code platform which supports full lifecycle API management, including creation, management and monitoring of API endpoints.", + "url": "https://www.mulesoft.com/platform/api-management", + "name": "MuleSoft", + "desc": "MuleSoft - Manage your API lifecycle, quickly design, test, and publish APIs." + }, + { + "category": "A Low Code platform which supports full lifecycle API management, including creation, management and monitoring of API endpoints.", + "url": "https://docs.workato.com/api-management.html", + "name": "Workato API Management", + "desc": "Workato API Management - Turn callable recipes into endpoints and organize the endpoints into API collections, making it easier for users to find and consume the endpoints through other recipes or third-party apps, without requiring access to your Workato account." + }, + { + "category": "Power Platform (Microsoft)", + "url": "https://github.com/MscrmTools/XrmToolBox", + "name": "XrmToolBox", + "desc": "XrmToolBox - An application that gather multiple tools to ease the customization and configuration of Microsoft Dynamics CRM/365/Dataverse/PowerApps." + }, + { + "category": "Power Platform (Microsoft)", + "url": "https://github.com/rajyraman/Levelup-for-Dynamics-CRM", + "name": "Levelup for Dynamics CRM", + "desc": "Levelup for Dynamics CRM - Chrome, Edge Chromium and Firefox Extension for Dynamics CRM/365/Power Apps Power users." + }, + { + "category": "Power Platform (Microsoft)", + "url": "https://github.com/PowerPlatformAF/PowerPlatformAF", + "name": "Power Platform Adoption Framework", + "desc": "Power Platform Adoption Framework - The framework that enables people to create beautiful and useful things on Power Platform deployed in large, enterprise-grade organizations." + }, + { + "category": "Power Platform (Microsoft)", + "url": "https://github.com/Zerg00s/FlowPowerAppsMigrator", + "name": "Flow & Power Apps Migrator", + "desc": "Flow & Power Apps Migrator - Converts SharePoint Data sources for the MS Flow and PowerApps to a new tenant of your choice." + }, + { + "category": "Power Platform (Microsoft)", + "url": "https://github.com/TracyGH/SharePointWorkflowConverter", + "name": "SharePoint Workflow Converter", + "desc": "SharePoint Workflow Converter - A proof-of-concept C# console application for retrieving legacy 2010 & 2013 custom SharePoint workflow definition files, and creating new Power Automate flows programmatically." + }, + { + "category": "Power Platform (Microsoft)", + "url": "https://github.com/microsoft/PowerPlatformConnectors", + "name": "Power Platform Connectors", + "desc": "Power Platform Connectors - This is a repository for Microsoft Power Automate, Power Apps, and Azure Logic Apps connectors." + }, + { + "category": "Power Platform (Microsoft)", + "url": "https://github.com/microsoft/Power-Fx", + "name": "Microsoft Power Fx", + "desc": "Microsoft Power Fx - Power Fx Low Code programming language." + }, + { + "category": "Workato", + "url": "https://github.com/workato/custom_connector_docs", + "name": "Custom Connector Docs", + "desc": "Custom Connector Docs - Source files for Workato custom connector documentation." + }, + { + "category": "Power Platform (Microsoft)", + "url": "https://github.com/pnp/powerfx-samples", + "name": "Power Fx Samples", + "desc": "Power Fx Samples - This repository contains samples for Power Fx Low Code programming language." + }, + { + "category": "Power Platform (Microsoft)", + "url": "https://github.com/microsoft/PowerApps-Azure-Lab", + "name": "Power Apps & Azure Lab", + "desc": "Power Apps & Azure Lab - Repository to host the PowerApps Azure Lab." + }, + { + "category": "Power Platform (Microsoft)", + "url": "https://github.com/MicrosoftLearning/PL-900-Microsoft-Power-Platform-Fundamentals", + "name": "PL-900: Power Platform Fundamentals", + "desc": "PL-900: Power Platform Fundamentals - Power Platform Fundamentals course materials." + }, + { + "category": "Workato", + "url": "https://github.com/workato/full-embed-sample", + "name": "Embedding Guide", + "desc": "Embedding Guide - A guided example on how to use Workato embedded." + }, + { + "category": "Power Platform (Microsoft)", + "url": "https://github.com/pnp/powerapps-samples", + "name": "Power Apps Samples", + "desc": "Power Apps Samples - Contains curated community Microsoft Power App samples." + }, + { + "category": "Power Platform (Microsoft)", + "url": "https://github.com/Eickhel/PowerApps-samples", + "name": "PowerApps Samples", + "desc": "PowerApps Samples - Power Apps samples by Power Nimbus." + }, + { + "category": "Power Platform (Microsoft)", + "url": "https://github.com/iAmManCat/PowerApps-Branding-Template", + "name": "Power Apps Branding Template", + "desc": "Power Apps Branding Template - A template to empower developers and reduce time wasted on control changes." + }, + { + "category": "Power Platform (Microsoft)", + "url": "https://github.com/pnp/sp-power-platform-solutions", + "name": "SharePoint Power Platform Solutions", + "desc": "SharePoint Power Platform Solutions - Sample PowerApps solutions designed to be used in SharePoint context." + }, + { + "category": "Power Platform (Microsoft)", + "url": "https://github.com/pnp/powerautomate-samples", + "name": "Power Automate Samples", + "desc": "Power Automate Samples - Contains curated community samples for Microsoft Power Automate." + }, + { + "category": "Power Platform (Microsoft)", + "url": "https://github.com/wortell/PowerAutomate-AutomatischeReistijd", + "name": "Automatic travel time", + "desc": "Automatic travel time - Automatic travel time in your Office 365 calendar." + }, + { + "category": "Power Platform (Microsoft)", + "url": "https://github.com/ericsche/MCinTeams", + "name": "Message Center in Teams", + "desc": "Message Center in Teams - Message Center in Teams is a simple PowerAutomate Solution to gather Message Center Announcement and post them in a Teams Channel." + }, + { + "category": "Power Platform (Microsoft)", + "url": "https://github.com/ferrybouwman/Power-BI-Read-Only-REST-API", + "name": "Consume Power BI", + "desc": "Consume Power BI - Solution based on either Powershell or Power Automate (Flow) to consume the recently released Power BI Asynchronous Unified Scanning API." + }, + { + "category": "Power Platform (Microsoft)", + "url": "https://github.com/vaibhav21791/PostListItemToTwitter", + "name": "Post List Item To Twitter", + "desc": "Post List Item To Twitter - A Microsoft Power Automate Flow to Post a SharePoint List Item to Twitter along with media content." + }, + { + "category": "Workato", + "url": "https://www.workato.com/solutions", + "name": "Solution Marketplace", + "desc": "Solution Marketplace - A curated list of ready-to-use solutions built by Workato and vendors." + }, + { + "category": "Workato", + "url": "https://support.workato.com/en/support/solutions", + "name": "Support History", + "desc": "Support History - A public repository of resolved support tickets to help tackle issues." + }, + { + "category": "Power Platform (Microsoft)", + "url": "https://powerusers.microsoft.com/t5/Power-Apps-Community/ct-p/PowerApps1", + "name": "Microsoft Power Apps Official Community", + "desc": "Microsoft Power Apps Official Community" + }, + { + "category": "Power Platform (Microsoft)", + "url": "https://powerusers.microsoft.com/t5/Microsoft-Power-Automate/ct-p/MPACommunity", + "name": "Microsoft Power Automate Official Community", + "desc": "Microsoft Power Automate Official Community" + }, + { + "category": "Power Platform (Microsoft)", + "url": "https://powerusers.microsoft.com/t5/Power-Virtual-Agents-Community/ct-p/PVACommunity", + "name": "Microsoft Power Virtual Agents Official Community", + "desc": "Microsoft Power Virtual Agents Official Community" + }, + { + "category": "Power Platform (Microsoft)", + "url": "https://community.powerbi.com/", + "name": "Microsoft Power BI Official Community", + "desc": "Microsoft Power BI Official Community" + }, + { + "category": "Power Platform (Microsoft)", + "url": "https://powp.co/", + "name": "PowP.Co Discord Community", + "desc": "PowP.Co Discord Community - A Discord community of Power Platform enthusiasts." + }, + { + "category": "Workato", + "url": "https://community.workato.com/", + "name": "Workato Communities", + "desc": "Workato Communities - The official Workato communities website." + }, + { + "category": "Workato", + "url": "https://systematic.workato.com/", + "name": "Systematic", + "desc": "Systematic - The only community for business systems." + }, + { + "category": "Power Platform (Microsoft)", + "url": "https://zenity.io/blog", + "name": "Zenity", + "desc": "Zenity - Low Code security and governance." + }, + { + "category": "Power Platform (Microsoft)", + "url": "https://www.darkreading.com/edge-articles/addressing-the-low-code-security-elephant-in-the-room", + "name": "Addressing the Low Code Security Elephant in the Room", + "desc": "Addressing the Low Code Security Elephant in the Room - The shared responsibility model for Low Code applications." + }, + { + "category": "Power Platform (Microsoft)", + "url": "https://blog.powp.co/", + "name": "PowPco", + "desc": "PowPco - Single-stop community for everything Power Platform Community related." + }, + { + "category": "Workato", + "url": "https://www.workato.com/the-connector/", + "name": "The Connector", + "desc": "The Connector - Workato blog on Business Automation." + }, + { + "category": "Power Platform (Microsoft)", + "url": "https://github.com/Power-Maverick/awesome-power-platform", + "name": "Awesome Microsoft Power Platform", + "desc": "Awesome Microsoft Power Platform - A collection of awesome things regarding the Power Platform ecosystem." + }, + { + "category": "Power Platform (Microsoft)", + "url": "https://github.com/valentin-vogel/awesome-nocode-lowcode", + "name": "Awesome No Code Low Code", + "desc": "Awesome No Code Low Code - A collection of awesome No Code and Low Code resources." + } +] +[ + { + "category": "Contents", + "url": "#awesome-low-code-", + "name": "Awesome Low Code", + "desc": "Awesome Low Code Contents Platforms Citizen Automation and Development Platform Low Code Application Platform Business Process Management Robotic Process Automation Intelligent Virtual Agent Integration Platform as a Service Low Code API Management Platform Tools, Extensions and Frameworks Power Platform (Microsoft) Reference Resources Power Platform (Microsoft) Workato Learning Resources Power Platform (Microsoft) Workato Samples, Templates and Solutions Power Platform (Microsoft) Workato Community Power Platform (Microsoft) Workato Blogs Power Platform (Microsoft) Workato Other Lists Power Platform (Microsoft)" + }, + { + "category": "Awesome Low Code", + "url": "#contents", + "name": "Contents", + "desc": "Contents" + }, + { + "category": "Awesome Low Code", + "url": "#platforms", + "name": "Platforms", + "desc": "Platforms Citizen Automation and Development Platform Low Code Application Platform Business Process Management Robotic Process Automation Intelligent Virtual Agent Integration Platform as a Service Low Code API Management Platform" + }, + { + "category": "Platforms", + "url": "#citizen-automation-and-development-platform", + "name": "Citizen Automation and Development Platform", + "desc": "Citizen Automation and Development Platform" + }, + { + "category": "Platforms", + "url": "#low-code-application-platform", + "name": "Low Code Application Platform", + "desc": "Low Code Application Platform" + }, + { + "category": "Platforms", + "url": "#business-process-management", + "name": "Business Process Management", + "desc": "Business Process Management" + }, + { + "category": "Platforms", + "url": "#robotic-process-automation", + "name": "Robotic Process Automation", + "desc": "Robotic Process Automation" + }, + { + "category": "Platforms", + "url": "#intelligent-virtual-agent", + "name": "Intelligent Virtual Agent", + "desc": "Intelligent Virtual Agent" + }, + { + "category": "Platforms", + "url": "#integration-platform-as-a-service", + "name": "Integration Platform as a Service", + "desc": "Integration Platform as a Service" + }, + { + "category": "Platforms", + "url": "#low-code-api-management-platform", + "name": "Low Code API Management Platform", + "desc": "Low Code API Management Platform" + }, + { + "category": "Awesome Low Code", + "url": "#tools-extensions-and-frameworks", + "name": "Tools, Extensions and Frameworks", + "desc": "Tools, Extensions and Frameworks Power Platform (Microsoft)" + }, + { + "category": "Tools, Extensions and Frameworks", + "url": "#power-platform-microsoft", + "name": "Power Platform (Microsoft)", + "desc": "Power Platform (Microsoft)" + }, + { + "category": "Awesome Low Code", + "url": "#reference-resources", + "name": "Reference Resources", + "desc": "Reference Resources Power Platform (Microsoft) Workato" + }, + { + "category": "Reference Resources", + "url": "#power-platform-microsoft-1", + "name": "Power Platform (Microsoft)", + "desc": "Power Platform (Microsoft)" + }, + { + "category": "Reference Resources", + "url": "#workato", + "name": "Workato", + "desc": "Workato" + }, + { + "category": "Awesome Low Code", + "url": "#learning-resources", + "name": "Learning Resources", + "desc": "Learning Resources Power Platform (Microsoft) Workato" + }, + { + "category": "Learning Resources", + "url": "#power-platform-microsoft-2", + "name": "Power Platform (Microsoft)", + "desc": "Power Platform (Microsoft)" + }, + { + "category": "Learning Resources", + "url": "#workato-1", + "name": "Workato", + "desc": "Workato" + }, + { + "category": "Awesome Low Code", + "url": "#samples-templates-and-solutions", + "name": "Samples, Templates and Solutions", + "desc": "Samples, Templates and Solutions Power Platform (Microsoft) Workato" + }, + { + "category": "Samples, Templates and Solutions", + "url": "#power-platform-microsoft-3", + "name": "Power Platform (Microsoft)", + "desc": "Power Platform (Microsoft)" + }, + { + "category": "Samples, Templates and Solutions", + "url": "#workato-2", + "name": "Workato", + "desc": "Workato" + }, + { + "category": "Awesome Low Code", + "url": "#community", + "name": "Community", + "desc": "Community Power Platform (Microsoft) Workato" + }, + { + "category": "Community", + "url": "#power-platform-microsoft-4", + "name": "Power Platform (Microsoft)", + "desc": "Power Platform (Microsoft)" + }, + { + "category": "Community", + "url": "#workato-3", + "name": "Workato", + "desc": "Workato" + }, + { + "category": "Awesome Low Code", + "url": "#blogs", + "name": "Blogs", + "desc": "Blogs Power Platform (Microsoft) Workato" + }, + { + "category": "Blogs", + "url": "#power-platform-microsoft-5", + "name": "Power Platform (Microsoft)", + "desc": "Power Platform (Microsoft)" + }, + { + "category": "Blogs", + "url": "#workato-4", + "name": "Workato", + "desc": "Workato" + }, + { + "category": "Awesome Low Code", + "url": "#other-lists", + "name": "Other Lists", + "desc": "Other Lists Power Platform (Microsoft)" + }, + { + "category": "Other Lists", + "url": "#power-platform-microsoft-6", + "name": "Power Platform (Microsoft)", + "desc": "Power Platform (Microsoft)" + }, + { + "category": "A development platform for business users (citizen developer is a term for business users, not a role or a job title) that doesn't require coding skills and is based on intuitive drag & drop interfaces. Applications created in such platforms are usually made to automate or improve efficiency of business processes and of personal productivity, without going through IT. CADP are usually consumed as SaaS.", + "url": "https://flow.microsoft.com/", + "name": "Power Automate (Microsoft)", + "desc": "Power Automate (Microsoft) - An online workflow service that automates actions across the most common apps and services." + }, + { + "category": "A development platform for business users (citizen developer is a term for business users, not a role or a job title) that doesn't require coding skills and is based on intuitive drag & drop interfaces. Applications created in such platforms are usually made to automate or improve efficiency of business processes and of personal productivity, without going through IT. CADP are usually consumed as SaaS.", + "url": "https://zapier.com/", + "name": "Zapier", + "desc": "Zapier - Allows its users to easily connect and automate the apps they use." + }, + { + "category": "A development platform for business users (citizen developer is a term for business users, not a role or a job title) that doesn't require coding skills and is based on intuitive drag & drop interfaces. Applications created in such platforms are usually made to automate or improve efficiency of business processes and of personal productivity, without going through IT. CADP are usually consumed as SaaS.", + "url": "https://www.salesforce.com/products/platform/einstein-automate/", + "name": "Einstein Automate (Salesforce)", + "desc": "Einstein Automate (Salesforce) - Empower your employees to do more of what matters by automating business processes easily without needing specialized development skills." + }, + { + "category": "A development platform for business users (citizen developer is a term for business users, not a role or a job title) that doesn't require coding skills and is based on intuitive drag & drop interfaces. Applications created in such platforms are usually made to automate or improve efficiency of business processes and of personal productivity, without going through IT. CADP are usually consumed as SaaS.", + "url": "https://www.atlassian.com/software/jira/features/automation", + "name": "Jira Automation (Atlassian)", + "desc": "Jira Automation (Atlassian) - Automation is a No Code rule builder that enables customers to build if-this-then-that-rules based on events in Jira." + }, + { + "category": "A development platform for business users (citizen developer is a term for business users, not a role or a job title) that doesn't require coding skills and is based on intuitive drag & drop interfaces. Applications created in such platforms are usually made to automate or improve efficiency of business processes and of personal productivity, without going through IT. CADP are usually consumed as SaaS.", + "url": "https://trello.com/power-ups/category/automation", + "name": "Trello Power-Ups (Atlassian)", + "desc": "Trello Power-Ups (Atlassian) - Helps teams meet their unique business needs through adaptable features and integrations." + }, + { + "category": "A development platform for business users (citizen developer is a term for business users, not a role or a job title) that doesn't require coding skills and is based on intuitive drag & drop interfaces. Applications created in such platforms are usually made to automate or improve efficiency of business processes and of personal productivity, without going through IT. CADP are usually consumed as SaaS.", + "url": "https://www.zoho.com/flow/", + "name": "Flow (Zoho)", + "desc": "Flow (Zoho) - An integration platform that helps you connect your apps without any code." + }, + { + "category": "An advanced development platform that enable organizations to create powerful enterprise grade applications with no to minimum extra coding requirements with easy to use drag & drop interfaces. Since such platforms simplify the application development process, more types of personas can contribute and accelerate the development process. Those platforms are PaaS development platforms, and can also reduce development cost and maintenance.", + "url": "https://powerapps.com/", + "name": "Power Apps (Microsoft)", + "desc": "Power Apps (Microsoft) - Build apps in hours—not months—that easily connect to data, use Excel-like expressions to add logic, and run on the web, iOS, and Android devices." + }, + { + "category": "An advanced development platform that enable organizations to create powerful enterprise grade applications with no to minimum extra coding requirements with easy to use drag & drop interfaces. Since such platforms simplify the application development process, more types of personas can contribute and accelerate the development process. Those platforms are PaaS development platforms, and can also reduce development cost and maintenance.", + "url": "https://powerbi.microsoft.com/", + "name": "Power BI", + "desc": "Power BI - Unify data from many sources to create interactive, immersive dashboards and reports that provide actionable insights and drive business results." + }, + { + "category": "An advanced development platform that enable organizations to create powerful enterprise grade applications with no to minimum extra coding requirements with easy to use drag & drop interfaces. Since such platforms simplify the application development process, more types of personas can contribute and accelerate the development process. Those platforms are PaaS development platforms, and can also reduce development cost and maintenance.", + "url": "https://appian.com/", + "name": "Appian", + "desc": "Appian - Provides a Low Code software development platform that enables organizations to rapidly develop powerful applications." + }, + { + "category": "An advanced development platform that enable organizations to create powerful enterprise grade applications with no to minimum extra coding requirements with easy to use drag & drop interfaces. Since such platforms simplify the application development process, more types of personas can contribute and accelerate the development process. Those platforms are PaaS development platforms, and can also reduce development cost and maintenance.", + "url": "https://mendix.com/", + "name": "Mendix", + "desc": "Mendix - The fastest and easiest high-productivity platform to create and continuously improve multi-channel applications at scale." + }, + { + "category": "An advanced development platform that enable organizations to create powerful enterprise grade applications with no to minimum extra coding requirements with easy to use drag & drop interfaces. Since such platforms simplify the application development process, more types of personas can contribute and accelerate the development process. Those platforms are PaaS development platforms, and can also reduce development cost and maintenance.", + "url": "https://www.outsystems.com/", + "name": "OutSystems", + "desc": "OutSystems - A Low Code platform that enables businesses to develop, deploy, and manage enterprise-grade apps." + }, + { + "category": "An advanced development platform that enable organizations to create powerful enterprise grade applications with no to minimum extra coding requirements with easy to use drag & drop interfaces. Since such platforms simplify the application development process, more types of personas can contribute and accelerate the development process. Those platforms are PaaS development platforms, and can also reduce development cost and maintenance.", + "url": "https://www.servicenow.com/now-platform.html", + "name": "Now Platform (ServiceNow)", + "desc": "Now Platform (ServiceNow) - Drive connected digital workflows across the enterprise, deliver modern, consumer-like experiences, and accelerate time-to-value and innovation." + }, + { + "category": "An advanced development platform that enable organizations to create powerful enterprise grade applications with no to minimum extra coding requirements with easy to use drag & drop interfaces. Since such platforms simplify the application development process, more types of personas can contribute and accelerate the development process. Those platforms are PaaS development platforms, and can also reduce development cost and maintenance.", + "url": "https://www.zoho.com/creator/low-code-platform/", + "name": "Creator (Zoho)", + "desc": "Creator (Zoho) - Build applications from scratch without having to write endless lines of code." + }, + { + "category": "An advanced development platform that enable organizations to create powerful enterprise grade applications with no to minimum extra coding requirements with easy to use drag & drop interfaces. Since such platforms simplify the application development process, more types of personas can contribute and accelerate the development process. Those platforms are PaaS development platforms, and can also reduce development cost and maintenance.", + "url": "https://www.bettyblocks.com/", + "name": "BettyBlocks", + "desc": "BettyBlocks - The #1 No Code platform for innovation, agility and empowerment. Used to create mobile, business and web applications at lightning speed." + }, + { + "category": "An advanced development platform that enable organizations to create powerful enterprise grade applications with no to minimum extra coding requirements with easy to use drag & drop interfaces. Since such platforms simplify the application development process, more types of personas can contribute and accelerate the development process. Those platforms are PaaS development platforms, and can also reduce development cost and maintenance.", + "url": "https://apex.oracle.com/en/platform/low-code/", + "name": "APEX (Oracle)", + "desc": "APEX (Oracle) - A Low Code development platform that enables you to build scalable, secure enterprise apps, with world-class features, that can be deployed anywhere." + }, + { + "category": "An advanced development platform that enable organizations to create powerful enterprise grade applications with no to minimum extra coding requirements with easy to use drag & drop interfaces. Since such platforms simplify the application development process, more types of personas can contribute and accelerate the development process. Those platforms are PaaS development platforms, and can also reduce development cost and maintenance.", + "url": "https://www.salesforce.com/products/platform", + "name": "Salesforce Platform, prev. Force.com (Salesforce)", + "desc": "Salesforce Platform, prev. Force.com (Salesforce) - Click, create, and ship from anywhere with Low Code." + }, + { + "category": "An advanced development platform that enable organizations to create powerful enterprise grade applications with no to minimum extra coding requirements with easy to use drag & drop interfaces. Since such platforms simplify the application development process, more types of personas can contribute and accelerate the development process. Those platforms are PaaS development platforms, and can also reduce development cost and maintenance.", + "url": "https://n8n.io/", + "name": "n8n", + "desc": "n8n - Workflow automation tool with many integrations and with fair-code license." + }, + { + "category": "A Low Code Application Platform dedicated to streamlining business processes. These platforms enable business users to automate complicated business workflows and actions with no coding background by providing an easy to use drag & drop interface. Automations that are built in such platforms are usually built in an event-driven mode (triggers) around critical business processes. BPA can be consumed via a SaaS or an on-premises appliance.", + "url": "https://www.pega.com/", + "name": "PegaSystems", + "desc": "PegaSystems - Provides business process and customer relationship management solutions for organizations." + }, + { + "category": "A Low Code Application Platform dedicated to streamlining business processes. These platforms enable business users to automate complicated business workflows and actions with no coding background by providing an easy to use drag & drop interface. Automations that are built in such platforms are usually built in an event-driven mode (triggers) around critical business processes. BPA can be consumed via a SaaS or an on-premises appliance.", + "url": "https://agilepoint.com/", + "name": "AgilePoint", + "desc": "AgilePoint - Deploy business-changing ideas in minutes, not months, with the AgilePoint digital process automation platform." + }, + { + "category": "A Low Code Application Platform dedicated to streamlining business processes. These platforms enable business users to automate complicated business workflows and actions with no coding background by providing an easy to use drag & drop interface. Automations that are built in such platforms are usually built in an event-driven mode (triggers) around critical business processes. BPA can be consumed via a SaaS or an on-premises appliance.", + "url": "https://www.quickbase.com/", + "name": "QuickBase", + "desc": "QuickBase - Helps businesses quickly turn ideas about better ways to work into apps that make them more efficient, informed, and productive." + }, + { + "category": "A Low Code Application Platform dedicated to streamlining business processes. These platforms enable business users to automate complicated business workflows and actions with no coding background by providing an easy to use drag & drop interface. Automations that are built in such platforms are usually built in an event-driven mode (triggers) around critical business processes. BPA can be consumed via a SaaS or an on-premises appliance.", + "url": "https://www.creatio.com/", + "name": "Creatio", + "desc": "Creatio - A global software company providing a leading Low Code platform for process management and CRM." + }, + { + "category": "A Low Code Application Platform dedicated to streamlining business processes. These platforms enable business users to automate complicated business workflows and actions with no coding background by providing an easy to use drag & drop interface. Automations that are built in such platforms are usually built in an event-driven mode (triggers) around critical business processes. BPA can be consumed via a SaaS or an on-premises appliance.", + "url": "https://www.auraquantic.com/", + "name": "AuraQuantic", + "desc": "AuraQuantic - A digital platform designed for business users to easily and rapidly build unlimited processes and applications." + }, + { + "category": "A Low Code Application Platform dedicated to streamlining business processes. These platforms enable business users to automate complicated business workflows and actions with no coding background by providing an easy to use drag & drop interface. Automations that are built in such platforms are usually built in an event-driven mode (triggers) around critical business processes. BPA can be consumed via a SaaS or an on-premises appliance.", + "url": "https://www.kintone.com/", + "name": "Kintone", + "desc": "Kintone - The best productivity software to business transformation Platform." + }, + { + "category": "A Low Code Application Platform dedicated to streamlining business processes. These platforms enable business users to automate complicated business workflows and actions with no coding background by providing an easy to use drag & drop interface. Automations that are built in such platforms are usually built in an event-driven mode (triggers) around critical business processes. BPA can be consumed via a SaaS or an on-premises appliance.", + "url": "https://www.prontoforms.com/", + "name": "ProntoForms", + "desc": "ProntoForms - Provides mobile business solutions to automate field sales, field service, and field data collection." + }, + { + "category": "A Low Code Application Platform dedicated to streamlining business processes. These platforms enable business users to automate complicated business workflows and actions with no coding background by providing an easy to use drag & drop interface. Automations that are built in such platforms are usually built in an event-driven mode (triggers) around critical business processes. BPA can be consumed via a SaaS or an on-premises appliance.", + "url": "https://trackvia.com/", + "name": "TrackVia", + "desc": "TrackVia - The leading Low Code workflow platform for operations." + }, + { + "category": "A Low Code Application Platform dedicated to streamlining business processes. These platforms enable business users to automate complicated business workflows and actions with no coding background by providing an easy to use drag & drop interface. Automations that are built in such platforms are usually built in an event-driven mode (triggers) around critical business processes. BPA can be consumed via a SaaS or an on-premises appliance.", + "url": "https://newgensoft.com/", + "name": "NewGen", + "desc": "NewGen - Simplify your complex, content-driven business needs with one comprehensive Low Code platform." + }, + { + "category": "An automation platform that helps organizations remove human manual intensive processes and avoid errors, as well as making sure human required attention is efficiently maximized only on critical aspects of work. RPA technology introduced the concept of software robots, built by the end-user humans, to perform repetitive manual intensive processes in an automation fashion, and can understand and processes computer interactions with SaaS and on-premises applications just like a human-being. RPA technologies involve building, deploying, and managing those software robots.", + "url": "https://powerautomate.microsoft.com/en-us/robotic-process-automation/", + "name": "Power Automate Desktop (Microsoft)", + "desc": "Power Automate Desktop (Microsoft) - Automate everything from simple data transfers to complex business workflows—directly from your desktop—using RPA desktop flows in Power Automate Desktop." + }, + { + "category": "An automation platform that helps organizations remove human manual intensive processes and avoid errors, as well as making sure human required attention is efficiently maximized only on critical aspects of work. RPA technology introduced the concept of software robots, built by the end-user humans, to perform repetitive manual intensive processes in an automation fashion, and can understand and processes computer interactions with SaaS and on-premises applications just like a human-being. RPA technologies involve building, deploying, and managing those software robots.", + "url": "https://www.servicetrace.com/", + "name": "Servicetrace RPA (Salesforce)", + "desc": "Servicetrace RPA (Salesforce) - Develop innovation in robotic solutions." + }, + { + "category": "An automation platform that helps organizations remove human manual intensive processes and avoid errors, as well as making sure human required attention is efficiently maximized only on critical aspects of work. RPA technology introduced the concept of software robots, built by the end-user humans, to perform repetitive manual intensive processes in an automation fashion, and can understand and processes computer interactions with SaaS and on-premises applications just like a human-being. RPA technologies involve building, deploying, and managing those software robots.", + "url": "https://appian.com/platform/complete-automation/robotic-process-automation-rpa.html", + "name": "Appian RPA", + "desc": "Appian RPA - Orchestrate RPA bots with people, systems, and data in a single workflow, scaling automation across your entire organization." + }, + { + "category": "An automation platform that helps organizations remove human manual intensive processes and avoid errors, as well as making sure human required attention is efficiently maximized only on critical aspects of work. RPA technology introduced the concept of software robots, built by the end-user humans, to perform repetitive manual intensive processes in an automation fashion, and can understand and processes computer interactions with SaaS and on-premises applications just like a human-being. RPA technologies involve building, deploying, and managing those software robots.", + "url": "https://www.workato.com/modern-rpa", + "name": "Workato RPA", + "desc": "Workato RPA - Integration-powered RPA for Intelligent Automation." + }, + { + "category": "A software application which is built and configured by its users to perform manual repetitive and error-prone tasks in an automated faster fashion. Bots are built and configured mostly in Low Code platforms via easy to use drag & drop interfaces. Examples to the use of bots could be seen in user conversation via messaging and voice platforms that help them take decisions and act through business processes.", + "url": "https://powervirtualagents.microsoft.com/", + "name": "Power Virtual Agents (Microsoft)", + "desc": "Power Virtual Agents (Microsoft) - Lets you create powerful chatbots that can answer questions posed by your customers, other employees, or visitors to your website or service." + }, + { + "category": "A software application which is built and configured by its users to perform manual repetitive and error-prone tasks in an automated faster fashion. Bots are built and configured mostly in Low Code platforms via easy to use drag & drop interfaces. Examples to the use of bots could be seen in user conversation via messaging and voice platforms that help them take decisions and act through business processes.", + "url": "https://docs.workato.com/workbot/overview.html", + "name": "Workato Workbot", + "desc": "Workato Workbot - A bot platform that allows you to build customizable workflows." + }, + { + "category": "A platform that help organizations control, simplify and standardize the way that applications are integrated (internally developed or 3rd party SaaS). Such platforms help to share data between applications, automate business workflows and remove manual error prone ones, in an advanced controlled manner. iPaaS also enables more types of personas to integrate applications, removing the constant dependency on software developers. iPaaS can be deployed within an organization either as a SaaS or as on-premises appliance.", + "url": "https://azure.microsoft.com/en-us/services/logic-apps/", + "name": "Azure Logic Apps (Microsoft)", + "desc": "Azure Logic Apps (Microsoft) - A cloud-based platform for creating and running automated workflows that integrate your apps, data, services, and systems." + }, + { + "category": "A platform that help organizations control, simplify and standardize the way that applications are integrated (internally developed or 3rd party SaaS). Such platforms help to share data between applications, automate business workflows and remove manual error prone ones, in an advanced controlled manner. iPaaS also enables more types of personas to integrate applications, removing the constant dependency on software developers. iPaaS can be deployed within an organization either as a SaaS or as on-premises appliance.", + "url": "https://mulesoft.com/", + "name": "MuleSoft (Salesforce)", + "desc": "MuleSoft (Salesforce) - Provides an integration and API platform that makes it easy to connect data from any system to create connected experiences." + }, + { + "category": "A platform that help organizations control, simplify and standardize the way that applications are integrated (internally developed or 3rd party SaaS). Such platforms help to share data between applications, automate business workflows and remove manual error prone ones, in an advanced controlled manner. iPaaS also enables more types of personas to integrate applications, removing the constant dependency on software developers. iPaaS can be deployed within an organization either as a SaaS or as on-premises appliance.", + "url": "https://www.workato.com", + "name": "Workato", + "desc": "Workato - An enterprise automation platform that helps organizations work faster and smarter without compromising governance and security." + }, + { + "category": "A Low Code platform which supports full lifecycle API management, including creation, management and monitoring of API endpoints.", + "url": "https://www.mulesoft.com/platform/api-management", + "name": "MuleSoft", + "desc": "MuleSoft - Manage your API lifecycle, quickly design, test, and publish APIs." + }, + { + "category": "A Low Code platform which supports full lifecycle API management, including creation, management and monitoring of API endpoints.", + "url": "https://docs.workato.com/api-management.html", + "name": "Workato API Management", + "desc": "Workato API Management - Turn callable recipes into endpoints and organize the endpoints into API collections, making it easier for users to find and consume the endpoints through other recipes or third-party apps, without requiring access to your Workato account." + }, + { + "category": "Power Platform (Microsoft)", + "url": "https://github.com/MscrmTools/XrmToolBox", + "name": "XrmToolBox", + "desc": "XrmToolBox - An application that gather multiple tools to ease the customization and configuration of Microsoft Dynamics CRM/365/Dataverse/PowerApps." + }, + { + "category": "Power Platform (Microsoft)", + "url": "https://github.com/rajyraman/Levelup-for-Dynamics-CRM", + "name": "Levelup for Dynamics CRM", + "desc": "Levelup for Dynamics CRM - Chrome, Edge Chromium and Firefox Extension for Dynamics CRM/365/Power Apps Power users." + }, + { + "category": "Power Platform (Microsoft)", + "url": "https://github.com/PowerPlatformAF/PowerPlatformAF", + "name": "Power Platform Adoption Framework", + "desc": "Power Platform Adoption Framework - The framework that enables people to create beautiful and useful things on Power Platform deployed in large, enterprise-grade organizations." + }, + { + "category": "Power Platform (Microsoft)", + "url": "https://github.com/Zerg00s/FlowPowerAppsMigrator", + "name": "Flow & Power Apps Migrator", + "desc": "Flow & Power Apps Migrator - Converts SharePoint Data sources for the MS Flow and PowerApps to a new tenant of your choice." + }, + { + "category": "Power Platform (Microsoft)", + "url": "https://github.com/TracyGH/SharePointWorkflowConverter", + "name": "SharePoint Workflow Converter", + "desc": "SharePoint Workflow Converter - A proof-of-concept C# console application for retrieving legacy 2010 & 2013 custom SharePoint workflow definition files, and creating new Power Automate flows programmatically." + }, + { + "category": "Power Platform (Microsoft)", + "url": "https://github.com/microsoft/PowerPlatformConnectors", + "name": "Power Platform Connectors", + "desc": "Power Platform Connectors - This is a repository for Microsoft Power Automate, Power Apps, and Azure Logic Apps connectors." + }, + { + "category": "Power Platform (Microsoft)", + "url": "https://github.com/microsoft/Power-Fx", + "name": "Microsoft Power Fx", + "desc": "Microsoft Power Fx - Power Fx Low Code programming language." + }, + { + "category": "Workato", + "url": "https://github.com/workato/custom_connector_docs", + "name": "Custom Connector Docs", + "desc": "Custom Connector Docs - Source files for Workato custom connector documentation." + }, + { + "category": "Power Platform (Microsoft)", + "url": "https://github.com/pnp/powerfx-samples", + "name": "Power Fx Samples", + "desc": "Power Fx Samples - This repository contains samples for Power Fx Low Code programming language." + }, + { + "category": "Power Platform (Microsoft)", + "url": "https://github.com/microsoft/PowerApps-Azure-Lab", + "name": "Power Apps & Azure Lab", + "desc": "Power Apps & Azure Lab - Repository to host the PowerApps Azure Lab." + }, + { + "category": "Power Platform (Microsoft)", + "url": "https://github.com/MicrosoftLearning/PL-900-Microsoft-Power-Platform-Fundamentals", + "name": "PL-900: Power Platform Fundamentals", + "desc": "PL-900: Power Platform Fundamentals - Power Platform Fundamentals course materials." + }, + { + "category": "Workato", + "url": "https://github.com/workato/full-embed-sample", + "name": "Embedding Guide", + "desc": "Embedding Guide - A guided example on how to use Workato embedded." + }, + { + "category": "Power Platform (Microsoft)", + "url": "https://github.com/pnp/powerapps-samples", + "name": "Power Apps Samples", + "desc": "Power Apps Samples - Contains curated community Microsoft Power App samples." + }, + { + "category": "Power Platform (Microsoft)", + "url": "https://github.com/Eickhel/PowerApps-samples", + "name": "PowerApps Samples", + "desc": "PowerApps Samples - Power Apps samples by Power Nimbus." + }, + { + "category": "Power Platform (Microsoft)", + "url": "https://github.com/iAmManCat/PowerApps-Branding-Template", + "name": "Power Apps Branding Template", + "desc": "Power Apps Branding Template - A template to empower developers and reduce time wasted on control changes." + }, + { + "category": "Power Platform (Microsoft)", + "url": "https://github.com/pnp/sp-power-platform-solutions", + "name": "SharePoint Power Platform Solutions", + "desc": "SharePoint Power Platform Solutions - Sample PowerApps solutions designed to be used in SharePoint context." + }, + { + "category": "Power Platform (Microsoft)", + "url": "https://github.com/pnp/powerautomate-samples", + "name": "Power Automate Samples", + "desc": "Power Automate Samples - Contains curated community samples for Microsoft Power Automate." + }, + { + "category": "Power Platform (Microsoft)", + "url": "https://github.com/wortell/PowerAutomate-AutomatischeReistijd", + "name": "Automatic travel time", + "desc": "Automatic travel time - Automatic travel time in your Office 365 calendar." + }, + { + "category": "Power Platform (Microsoft)", + "url": "https://github.com/ericsche/MCinTeams", + "name": "Message Center in Teams", + "desc": "Message Center in Teams - Message Center in Teams is a simple PowerAutomate Solution to gather Message Center Announcement and post them in a Teams Channel." + }, + { + "category": "Power Platform (Microsoft)", + "url": "https://github.com/ferrybouwman/Power-BI-Read-Only-REST-API", + "name": "Consume Power BI", + "desc": "Consume Power BI - Solution based on either Powershell or Power Automate (Flow) to consume the recently released Power BI Asynchronous Unified Scanning API." + }, + { + "category": "Power Platform (Microsoft)", + "url": "https://github.com/vaibhav21791/PostListItemToTwitter", + "name": "Post List Item To Twitter", + "desc": "Post List Item To Twitter - A Microsoft Power Automate Flow to Post a SharePoint List Item to Twitter along with media content." + }, + { + "category": "Workato", + "url": "https://www.workato.com/solutions", + "name": "Solution Marketplace", + "desc": "Solution Marketplace - A curated list of ready-to-use solutions built by Workato and vendors." + }, + { + "category": "Workato", + "url": "https://support.workato.com/en/support/solutions", + "name": "Support History", + "desc": "Support History - A public repository of resolved support tickets to help tackle issues." + }, + { + "category": "Power Platform (Microsoft)", + "url": "https://powerusers.microsoft.com/t5/Power-Apps-Community/ct-p/PowerApps1", + "name": "Microsoft Power Apps Official Community", + "desc": "Microsoft Power Apps Official Community" + }, + { + "category": "Power Platform (Microsoft)", + "url": "https://powerusers.microsoft.com/t5/Microsoft-Power-Automate/ct-p/MPACommunity", + "name": "Microsoft Power Automate Official Community", + "desc": "Microsoft Power Automate Official Community" + }, + { + "category": "Power Platform (Microsoft)", + "url": "https://powerusers.microsoft.com/t5/Power-Virtual-Agents-Community/ct-p/PVACommunity", + "name": "Microsoft Power Virtual Agents Official Community", + "desc": "Microsoft Power Virtual Agents Official Community" + }, + { + "category": "Power Platform (Microsoft)", + "url": "https://community.powerbi.com/", + "name": "Microsoft Power BI Official Community", + "desc": "Microsoft Power BI Official Community" + }, + { + "category": "Power Platform (Microsoft)", + "url": "https://powp.co/", + "name": "PowP.Co Discord Community", + "desc": "PowP.Co Discord Community - A Discord community of Power Platform enthusiasts." + }, + { + "category": "Workato", + "url": "https://community.workato.com/", + "name": "Workato Communities", + "desc": "Workato Communities - The official Workato communities website." + }, + { + "category": "Workato", + "url": "https://systematic.workato.com/", + "name": "Systematic", + "desc": "Systematic - The only community for business systems." + }, + { + "category": "Power Platform (Microsoft)", + "url": "https://zenity.io/blog", + "name": "Zenity", + "desc": "Zenity - Low Code security and governance." + }, + { + "category": "Power Platform (Microsoft)", + "url": "https://www.darkreading.com/edge-articles/addressing-the-low-code-security-elephant-in-the-room", + "name": "Addressing the Low Code Security Elephant in the Room", + "desc": "Addressing the Low Code Security Elephant in the Room - The shared responsibility model for Low Code applications." + }, + { + "category": "Power Platform (Microsoft)", + "url": "https://blog.powp.co/", + "name": "PowPco", + "desc": "PowPco - Single-stop community for everything Power Platform Community related." + }, + { + "category": "Workato", + "url": "https://www.workato.com/the-connector/", + "name": "The Connector", + "desc": "The Connector - Workato blog on Business Automation." + }, + { + "category": "Power Platform (Microsoft)", + "url": "https://github.com/Power-Maverick/awesome-power-platform", + "name": "Awesome Microsoft Power Platform", + "desc": "Awesome Microsoft Power Platform - A collection of awesome things regarding the Power Platform ecosystem." + }, + { + "category": "Power Platform (Microsoft)", + "url": "https://github.com/valentin-vogel/awesome-nocode-lowcode", + "name": "Awesome No Code Low Code", + "desc": "Awesome No Code Low Code - A collection of awesome No Code and Low Code resources." + } +] +[ + { + "category": "Contents", + "url": "#awesome-low-code-", + "name": "Awesome Low Code", + "desc": "Awesome Low Code Contents Platforms Citizen Automation and Development Platform Low Code Application Platform Business Process Management Robotic Process Automation Intelligent Virtual Agent Integration Platform as a Service Low Code API Management Platform Tools, Extensions and Frameworks Power Platform (Microsoft) Reference Resources Power Platform (Microsoft) Workato Learning Resources Power Platform (Microsoft) Workato Samples, Templates and Solutions Power Platform (Microsoft) Workato Community Power Platform (Microsoft) Workato Blogs Power Platform (Microsoft) Workato Other Lists Power Platform (Microsoft)" + }, + { + "category": "Awesome Low Code", + "url": "#contents", + "name": "Contents", + "desc": "Contents" + }, + { + "category": "Awesome Low Code", + "url": "#platforms", + "name": "Platforms", + "desc": "Platforms Citizen Automation and Development Platform Low Code Application Platform Business Process Management Robotic Process Automation Intelligent Virtual Agent Integration Platform as a Service Low Code API Management Platform" + }, + { + "category": "Platforms", + "url": "#citizen-automation-and-development-platform", + "name": "Citizen Automation and Development Platform", + "desc": "Citizen Automation and Development Platform" + }, + { + "category": "Platforms", + "url": "#low-code-application-platform", + "name": "Low Code Application Platform", + "desc": "Low Code Application Platform" + }, + { + "category": "Platforms", + "url": "#business-process-management", + "name": "Business Process Management", + "desc": "Business Process Management" + }, + { + "category": "Platforms", + "url": "#robotic-process-automation", + "name": "Robotic Process Automation", + "desc": "Robotic Process Automation" + }, + { + "category": "Platforms", + "url": "#intelligent-virtual-agent", + "name": "Intelligent Virtual Agent", + "desc": "Intelligent Virtual Agent" + }, + { + "category": "Platforms", + "url": "#integration-platform-as-a-service", + "name": "Integration Platform as a Service", + "desc": "Integration Platform as a Service" + }, + { + "category": "Platforms", + "url": "#low-code-api-management-platform", + "name": "Low Code API Management Platform", + "desc": "Low Code API Management Platform" + }, + { + "category": "Awesome Low Code", + "url": "#tools-extensions-and-frameworks", + "name": "Tools, Extensions and Frameworks", + "desc": "Tools, Extensions and Frameworks Power Platform (Microsoft)" + }, + { + "category": "Tools, Extensions and Frameworks", + "url": "#power-platform-microsoft", + "name": "Power Platform (Microsoft)", + "desc": "Power Platform (Microsoft)" + }, + { + "category": "Awesome Low Code", + "url": "#reference-resources", + "name": "Reference Resources", + "desc": "Reference Resources Power Platform (Microsoft) Workato" + }, + { + "category": "Reference Resources", + "url": "#power-platform-microsoft-1", + "name": "Power Platform (Microsoft)", + "desc": "Power Platform (Microsoft)" + }, + { + "category": "Reference Resources", + "url": "#workato", + "name": "Workato", + "desc": "Workato" + }, + { + "category": "Awesome Low Code", + "url": "#learning-resources", + "name": "Learning Resources", + "desc": "Learning Resources Power Platform (Microsoft) Workato" + }, + { + "category": "Learning Resources", + "url": "#power-platform-microsoft-2", + "name": "Power Platform (Microsoft)", + "desc": "Power Platform (Microsoft)" + }, + { + "category": "Learning Resources", + "url": "#workato-1", + "name": "Workato", + "desc": "Workato" + }, + { + "category": "Awesome Low Code", + "url": "#samples-templates-and-solutions", + "name": "Samples, Templates and Solutions", + "desc": "Samples, Templates and Solutions Power Platform (Microsoft) Workato" + }, + { + "category": "Samples, Templates and Solutions", + "url": "#power-platform-microsoft-3", + "name": "Power Platform (Microsoft)", + "desc": "Power Platform (Microsoft)" + }, + { + "category": "Samples, Templates and Solutions", + "url": "#workato-2", + "name": "Workato", + "desc": "Workato" + }, + { + "category": "Awesome Low Code", + "url": "#community", + "name": "Community", + "desc": "Community Power Platform (Microsoft) Workato" + }, + { + "category": "Community", + "url": "#power-platform-microsoft-4", + "name": "Power Platform (Microsoft)", + "desc": "Power Platform (Microsoft)" + }, + { + "category": "Community", + "url": "#workato-3", + "name": "Workato", + "desc": "Workato" + }, + { + "category": "Awesome Low Code", + "url": "#blogs", + "name": "Blogs", + "desc": "Blogs Power Platform (Microsoft) Workato" + }, + { + "category": "Blogs", + "url": "#power-platform-microsoft-5", + "name": "Power Platform (Microsoft)", + "desc": "Power Platform (Microsoft)" + }, + { + "category": "Blogs", + "url": "#workato-4", + "name": "Workato", + "desc": "Workato" + }, + { + "category": "Awesome Low Code", + "url": "#other-lists", + "name": "Other Lists", + "desc": "Other Lists Power Platform (Microsoft)" + }, + { + "category": "Other Lists", + "url": "#power-platform-microsoft-6", + "name": "Power Platform (Microsoft)", + "desc": "Power Platform (Microsoft)" + }, + { + "category": "A development platform for business users (citizen developer is a term for business users, not a role or a job title) that doesn't require coding skills and is based on intuitive drag & drop interfaces. Applications created in such platforms are usually made to automate or improve efficiency of business processes and of personal productivity, without going through IT. CADP are usually consumed as SaaS.", + "url": "https://flow.microsoft.com/", + "name": "Power Automate (Microsoft)", + "desc": "Power Automate (Microsoft) - An online workflow service that automates actions across the most common apps and services." + }, + { + "category": "A development platform for business users (citizen developer is a term for business users, not a role or a job title) that doesn't require coding skills and is based on intuitive drag & drop interfaces. Applications created in such platforms are usually made to automate or improve efficiency of business processes and of personal productivity, without going through IT. CADP are usually consumed as SaaS.", + "url": "https://zapier.com/", + "name": "Zapier", + "desc": "Zapier - Allows its users to easily connect and automate the apps they use." + }, + { + "category": "A development platform for business users (citizen developer is a term for business users, not a role or a job title) that doesn't require coding skills and is based on intuitive drag & drop interfaces. Applications created in such platforms are usually made to automate or improve efficiency of business processes and of personal productivity, without going through IT. CADP are usually consumed as SaaS.", + "url": "https://www.salesforce.com/products/platform/einstein-automate/", + "name": "Einstein Automate (Salesforce)", + "desc": "Einstein Automate (Salesforce) - Empower your employees to do more of what matters by automating business processes easily without needing specialized development skills." + }, + { + "category": "A development platform for business users (citizen developer is a term for business users, not a role or a job title) that doesn't require coding skills and is based on intuitive drag & drop interfaces. Applications created in such platforms are usually made to automate or improve efficiency of business processes and of personal productivity, without going through IT. CADP are usually consumed as SaaS.", + "url": "https://www.atlassian.com/software/jira/features/automation", + "name": "Jira Automation (Atlassian)", + "desc": "Jira Automation (Atlassian) - Automation is a No Code rule builder that enables customers to build if-this-then-that-rules based on events in Jira." + }, + { + "category": "A development platform for business users (citizen developer is a term for business users, not a role or a job title) that doesn't require coding skills and is based on intuitive drag & drop interfaces. Applications created in such platforms are usually made to automate or improve efficiency of business processes and of personal productivity, without going through IT. CADP are usually consumed as SaaS.", + "url": "https://trello.com/power-ups/category/automation", + "name": "Trello Power-Ups (Atlassian)", + "desc": "Trello Power-Ups (Atlassian) - Helps teams meet their unique business needs through adaptable features and integrations." + }, + { + "category": "A development platform for business users (citizen developer is a term for business users, not a role or a job title) that doesn't require coding skills and is based on intuitive drag & drop interfaces. Applications created in such platforms are usually made to automate or improve efficiency of business processes and of personal productivity, without going through IT. CADP are usually consumed as SaaS.", + "url": "https://www.zoho.com/flow/", + "name": "Flow (Zoho)", + "desc": "Flow (Zoho) - An integration platform that helps you connect your apps without any code." + }, + { + "category": "An advanced development platform that enable organizations to create powerful enterprise grade applications with no to minimum extra coding requirements with easy to use drag & drop interfaces. Since such platforms simplify the application development process, more types of personas can contribute and accelerate the development process. Those platforms are PaaS development platforms, and can also reduce development cost and maintenance.", + "url": "https://powerapps.com/", + "name": "Power Apps (Microsoft)", + "desc": "Power Apps (Microsoft) - Build apps in hours—not months—that easily connect to data, use Excel-like expressions to add logic, and run on the web, iOS, and Android devices." + }, + { + "category": "An advanced development platform that enable organizations to create powerful enterprise grade applications with no to minimum extra coding requirements with easy to use drag & drop interfaces. Since such platforms simplify the application development process, more types of personas can contribute and accelerate the development process. Those platforms are PaaS development platforms, and can also reduce development cost and maintenance.", + "url": "https://powerbi.microsoft.com/", + "name": "Power BI", + "desc": "Power BI - Unify data from many sources to create interactive, immersive dashboards and reports that provide actionable insights and drive business results." + }, + { + "category": "An advanced development platform that enable organizations to create powerful enterprise grade applications with no to minimum extra coding requirements with easy to use drag & drop interfaces. Since such platforms simplify the application development process, more types of personas can contribute and accelerate the development process. Those platforms are PaaS development platforms, and can also reduce development cost and maintenance.", + "url": "https://appian.com/", + "name": "Appian", + "desc": "Appian - Provides a Low Code software development platform that enables organizations to rapidly develop powerful applications." + }, + { + "category": "An advanced development platform that enable organizations to create powerful enterprise grade applications with no to minimum extra coding requirements with easy to use drag & drop interfaces. Since such platforms simplify the application development process, more types of personas can contribute and accelerate the development process. Those platforms are PaaS development platforms, and can also reduce development cost and maintenance.", + "url": "https://mendix.com/", + "name": "Mendix", + "desc": "Mendix - The fastest and easiest high-productivity platform to create and continuously improve multi-channel applications at scale." + }, + { + "category": "An advanced development platform that enable organizations to create powerful enterprise grade applications with no to minimum extra coding requirements with easy to use drag & drop interfaces. Since such platforms simplify the application development process, more types of personas can contribute and accelerate the development process. Those platforms are PaaS development platforms, and can also reduce development cost and maintenance.", + "url": "https://www.outsystems.com/", + "name": "OutSystems", + "desc": "OutSystems - A Low Code platform that enables businesses to develop, deploy, and manage enterprise-grade apps." + }, + { + "category": "An advanced development platform that enable organizations to create powerful enterprise grade applications with no to minimum extra coding requirements with easy to use drag & drop interfaces. Since such platforms simplify the application development process, more types of personas can contribute and accelerate the development process. Those platforms are PaaS development platforms, and can also reduce development cost and maintenance.", + "url": "https://www.servicenow.com/now-platform.html", + "name": "Now Platform (ServiceNow)", + "desc": "Now Platform (ServiceNow) - Drive connected digital workflows across the enterprise, deliver modern, consumer-like experiences, and accelerate time-to-value and innovation." + }, + { + "category": "An advanced development platform that enable organizations to create powerful enterprise grade applications with no to minimum extra coding requirements with easy to use drag & drop interfaces. Since such platforms simplify the application development process, more types of personas can contribute and accelerate the development process. Those platforms are PaaS development platforms, and can also reduce development cost and maintenance.", + "url": "https://www.zoho.com/creator/low-code-platform/", + "name": "Creator (Zoho)", + "desc": "Creator (Zoho) - Build applications from scratch without having to write endless lines of code." + }, + { + "category": "An advanced development platform that enable organizations to create powerful enterprise grade applications with no to minimum extra coding requirements with easy to use drag & drop interfaces. Since such platforms simplify the application development process, more types of personas can contribute and accelerate the development process. Those platforms are PaaS development platforms, and can also reduce development cost and maintenance.", + "url": "https://www.bettyblocks.com/", + "name": "BettyBlocks", + "desc": "BettyBlocks - The #1 No Code platform for innovation, agility and empowerment. Used to create mobile, business and web applications at lightning speed." + }, + { + "category": "An advanced development platform that enable organizations to create powerful enterprise grade applications with no to minimum extra coding requirements with easy to use drag & drop interfaces. Since such platforms simplify the application development process, more types of personas can contribute and accelerate the development process. Those platforms are PaaS development platforms, and can also reduce development cost and maintenance.", + "url": "https://apex.oracle.com/en/platform/low-code/", + "name": "APEX (Oracle)", + "desc": "APEX (Oracle) - A Low Code development platform that enables you to build scalable, secure enterprise apps, with world-class features, that can be deployed anywhere." + }, + { + "category": "An advanced development platform that enable organizations to create powerful enterprise grade applications with no to minimum extra coding requirements with easy to use drag & drop interfaces. Since such platforms simplify the application development process, more types of personas can contribute and accelerate the development process. Those platforms are PaaS development platforms, and can also reduce development cost and maintenance.", + "url": "https://www.salesforce.com/products/platform", + "name": "Salesforce Platform, prev. Force.com (Salesforce)", + "desc": "Salesforce Platform, prev. Force.com (Salesforce) - Click, create, and ship from anywhere with Low Code." + }, + { + "category": "An advanced development platform that enable organizations to create powerful enterprise grade applications with no to minimum extra coding requirements with easy to use drag & drop interfaces. Since such platforms simplify the application development process, more types of personas can contribute and accelerate the development process. Those platforms are PaaS development platforms, and can also reduce development cost and maintenance.", + "url": "https://n8n.io/", + "name": "n8n", + "desc": "n8n - Workflow automation tool with many integrations and with fair-code license." + }, + { + "category": "A Low Code Application Platform dedicated to streamlining business processes. These platforms enable business users to automate complicated business workflows and actions with no coding background by providing an easy to use drag & drop interface. Automations that are built in such platforms are usually built in an event-driven mode (triggers) around critical business processes. BPA can be consumed via a SaaS or an on-premises appliance.", + "url": "https://www.pega.com/", + "name": "PegaSystems", + "desc": "PegaSystems - Provides business process and customer relationship management solutions for organizations." + }, + { + "category": "A Low Code Application Platform dedicated to streamlining business processes. These platforms enable business users to automate complicated business workflows and actions with no coding background by providing an easy to use drag & drop interface. Automations that are built in such platforms are usually built in an event-driven mode (triggers) around critical business processes. BPA can be consumed via a SaaS or an on-premises appliance.", + "url": "https://agilepoint.com/", + "name": "AgilePoint", + "desc": "AgilePoint - Deploy business-changing ideas in minutes, not months, with the AgilePoint digital process automation platform." + }, + { + "category": "A Low Code Application Platform dedicated to streamlining business processes. These platforms enable business users to automate complicated business workflows and actions with no coding background by providing an easy to use drag & drop interface. Automations that are built in such platforms are usually built in an event-driven mode (triggers) around critical business processes. BPA can be consumed via a SaaS or an on-premises appliance.", + "url": "https://www.quickbase.com/", + "name": "QuickBase", + "desc": "QuickBase - Helps businesses quickly turn ideas about better ways to work into apps that make them more efficient, informed, and productive." + }, + { + "category": "A Low Code Application Platform dedicated to streamlining business processes. These platforms enable business users to automate complicated business workflows and actions with no coding background by providing an easy to use drag & drop interface. Automations that are built in such platforms are usually built in an event-driven mode (triggers) around critical business processes. BPA can be consumed via a SaaS or an on-premises appliance.", + "url": "https://www.creatio.com/", + "name": "Creatio", + "desc": "Creatio - A global software company providing a leading Low Code platform for process management and CRM." + }, + { + "category": "A Low Code Application Platform dedicated to streamlining business processes. These platforms enable business users to automate complicated business workflows and actions with no coding background by providing an easy to use drag & drop interface. Automations that are built in such platforms are usually built in an event-driven mode (triggers) around critical business processes. BPA can be consumed via a SaaS or an on-premises appliance.", + "url": "https://www.auraquantic.com/", + "name": "AuraQuantic", + "desc": "AuraQuantic - A digital platform designed for business users to easily and rapidly build unlimited processes and applications." + }, + { + "category": "A Low Code Application Platform dedicated to streamlining business processes. These platforms enable business users to automate complicated business workflows and actions with no coding background by providing an easy to use drag & drop interface. Automations that are built in such platforms are usually built in an event-driven mode (triggers) around critical business processes. BPA can be consumed via a SaaS or an on-premises appliance.", + "url": "https://www.kintone.com/", + "name": "Kintone", + "desc": "Kintone - The best productivity software to business transformation Platform." + }, + { + "category": "A Low Code Application Platform dedicated to streamlining business processes. These platforms enable business users to automate complicated business workflows and actions with no coding background by providing an easy to use drag & drop interface. Automations that are built in such platforms are usually built in an event-driven mode (triggers) around critical business processes. BPA can be consumed via a SaaS or an on-premises appliance.", + "url": "https://www.prontoforms.com/", + "name": "ProntoForms", + "desc": "ProntoForms - Provides mobile business solutions to automate field sales, field service, and field data collection." + }, + { + "category": "A Low Code Application Platform dedicated to streamlining business processes. These platforms enable business users to automate complicated business workflows and actions with no coding background by providing an easy to use drag & drop interface. Automations that are built in such platforms are usually built in an event-driven mode (triggers) around critical business processes. BPA can be consumed via a SaaS or an on-premises appliance.", + "url": "https://trackvia.com/", + "name": "TrackVia", + "desc": "TrackVia - The leading Low Code workflow platform for operations." + }, + { + "category": "A Low Code Application Platform dedicated to streamlining business processes. These platforms enable business users to automate complicated business workflows and actions with no coding background by providing an easy to use drag & drop interface. Automations that are built in such platforms are usually built in an event-driven mode (triggers) around critical business processes. BPA can be consumed via a SaaS or an on-premises appliance.", + "url": "https://newgensoft.com/", + "name": "NewGen", + "desc": "NewGen - Simplify your complex, content-driven business needs with one comprehensive Low Code platform." + }, + { + "category": "An automation platform that helps organizations remove human manual intensive processes and avoid errors, as well as making sure human required attention is efficiently maximized only on critical aspects of work. RPA technology introduced the concept of software robots, built by the end-user humans, to perform repetitive manual intensive processes in an automation fashion, and can understand and processes computer interactions with SaaS and on-premises applications just like a human-being. RPA technologies involve building, deploying, and managing those software robots.", + "url": "https://powerautomate.microsoft.com/en-us/robotic-process-automation/", + "name": "Power Automate Desktop (Microsoft)", + "desc": "Power Automate Desktop (Microsoft) - Automate everything from simple data transfers to complex business workflows—directly from your desktop—using RPA desktop flows in Power Automate Desktop." + }, + { + "category": "An automation platform that helps organizations remove human manual intensive processes and avoid errors, as well as making sure human required attention is efficiently maximized only on critical aspects of work. RPA technology introduced the concept of software robots, built by the end-user humans, to perform repetitive manual intensive processes in an automation fashion, and can understand and processes computer interactions with SaaS and on-premises applications just like a human-being. RPA technologies involve building, deploying, and managing those software robots.", + "url": "https://www.servicetrace.com/", + "name": "Servicetrace RPA (Salesforce)", + "desc": "Servicetrace RPA (Salesforce) - Develop innovation in robotic solutions." + }, + { + "category": "An automation platform that helps organizations remove human manual intensive processes and avoid errors, as well as making sure human required attention is efficiently maximized only on critical aspects of work. RPA technology introduced the concept of software robots, built by the end-user humans, to perform repetitive manual intensive processes in an automation fashion, and can understand and processes computer interactions with SaaS and on-premises applications just like a human-being. RPA technologies involve building, deploying, and managing those software robots.", + "url": "https://appian.com/platform/complete-automation/robotic-process-automation-rpa.html", + "name": "Appian RPA", + "desc": "Appian RPA - Orchestrate RPA bots with people, systems, and data in a single workflow, scaling automation across your entire organization." + }, + { + "category": "An automation platform that helps organizations remove human manual intensive processes and avoid errors, as well as making sure human required attention is efficiently maximized only on critical aspects of work. RPA technology introduced the concept of software robots, built by the end-user humans, to perform repetitive manual intensive processes in an automation fashion, and can understand and processes computer interactions with SaaS and on-premises applications just like a human-being. RPA technologies involve building, deploying, and managing those software robots.", + "url": "https://www.workato.com/modern-rpa", + "name": "Workato RPA", + "desc": "Workato RPA - Integration-powered RPA for Intelligent Automation." + }, + { + "category": "A software application which is built and configured by its users to perform manual repetitive and error-prone tasks in an automated faster fashion. Bots are built and configured mostly in Low Code platforms via easy to use drag & drop interfaces. Examples to the use of bots could be seen in user conversation via messaging and voice platforms that help them take decisions and act through business processes.", + "url": "https://powervirtualagents.microsoft.com/", + "name": "Power Virtual Agents (Microsoft)", + "desc": "Power Virtual Agents (Microsoft) - Lets you create powerful chatbots that can answer questions posed by your customers, other employees, or visitors to your website or service." + }, + { + "category": "A software application which is built and configured by its users to perform manual repetitive and error-prone tasks in an automated faster fashion. Bots are built and configured mostly in Low Code platforms via easy to use drag & drop interfaces. Examples to the use of bots could be seen in user conversation via messaging and voice platforms that help them take decisions and act through business processes.", + "url": "https://docs.workato.com/workbot/overview.html", + "name": "Workato Workbot", + "desc": "Workato Workbot - A bot platform that allows you to build customizable workflows." + }, + { + "category": "A platform that help organizations control, simplify and standardize the way that applications are integrated (internally developed or 3rd party SaaS). Such platforms help to share data between applications, automate business workflows and remove manual error prone ones, in an advanced controlled manner. iPaaS also enables more types of personas to integrate applications, removing the constant dependency on software developers. iPaaS can be deployed within an organization either as a SaaS or as on-premises appliance.", + "url": "https://azure.microsoft.com/en-us/services/logic-apps/", + "name": "Azure Logic Apps (Microsoft)", + "desc": "Azure Logic Apps (Microsoft) - A cloud-based platform for creating and running automated workflows that integrate your apps, data, services, and systems." + }, + { + "category": "A platform that help organizations control, simplify and standardize the way that applications are integrated (internally developed or 3rd party SaaS). Such platforms help to share data between applications, automate business workflows and remove manual error prone ones, in an advanced controlled manner. iPaaS also enables more types of personas to integrate applications, removing the constant dependency on software developers. iPaaS can be deployed within an organization either as a SaaS or as on-premises appliance.", + "url": "https://mulesoft.com/", + "name": "MuleSoft (Salesforce)", + "desc": "MuleSoft (Salesforce) - Provides an integration and API platform that makes it easy to connect data from any system to create connected experiences." + }, + { + "category": "A platform that help organizations control, simplify and standardize the way that applications are integrated (internally developed or 3rd party SaaS). Such platforms help to share data between applications, automate business workflows and remove manual error prone ones, in an advanced controlled manner. iPaaS also enables more types of personas to integrate applications, removing the constant dependency on software developers. iPaaS can be deployed within an organization either as a SaaS or as on-premises appliance.", + "url": "https://www.workato.com", + "name": "Workato", + "desc": "Workato - An enterprise automation platform that helps organizations work faster and smarter without compromising governance and security." + }, + { + "category": "A Low Code platform which supports full lifecycle API management, including creation, management and monitoring of API endpoints.", + "url": "https://www.mulesoft.com/platform/api-management", + "name": "MuleSoft", + "desc": "MuleSoft - Manage your API lifecycle, quickly design, test, and publish APIs." + }, + { + "category": "A Low Code platform which supports full lifecycle API management, including creation, management and monitoring of API endpoints.", + "url": "https://docs.workato.com/api-management.html", + "name": "Workato API Management", + "desc": "Workato API Management - Turn callable recipes into endpoints and organize the endpoints into API collections, making it easier for users to find and consume the endpoints through other recipes or third-party apps, without requiring access to your Workato account." + }, + { + "category": "Power Platform (Microsoft)", + "url": "https://github.com/MscrmTools/XrmToolBox", + "name": "XrmToolBox", + "desc": "XrmToolBox - An application that gather multiple tools to ease the customization and configuration of Microsoft Dynamics CRM/365/Dataverse/PowerApps." + }, + { + "category": "Power Platform (Microsoft)", + "url": "https://github.com/rajyraman/Levelup-for-Dynamics-CRM", + "name": "Levelup for Dynamics CRM", + "desc": "Levelup for Dynamics CRM - Chrome, Edge Chromium and Firefox Extension for Dynamics CRM/365/Power Apps Power users." + }, + { + "category": "Power Platform (Microsoft)", + "url": "https://github.com/PowerPlatformAF/PowerPlatformAF", + "name": "Power Platform Adoption Framework", + "desc": "Power Platform Adoption Framework - The framework that enables people to create beautiful and useful things on Power Platform deployed in large, enterprise-grade organizations." + }, + { + "category": "Power Platform (Microsoft)", + "url": "https://github.com/Zerg00s/FlowPowerAppsMigrator", + "name": "Flow & Power Apps Migrator", + "desc": "Flow & Power Apps Migrator - Converts SharePoint Data sources for the MS Flow and PowerApps to a new tenant of your choice." + }, + { + "category": "Power Platform (Microsoft)", + "url": "https://github.com/TracyGH/SharePointWorkflowConverter", + "name": "SharePoint Workflow Converter", + "desc": "SharePoint Workflow Converter - A proof-of-concept C# console application for retrieving legacy 2010 & 2013 custom SharePoint workflow definition files, and creating new Power Automate flows programmatically." + }, + { + "category": "Power Platform (Microsoft)", + "url": "https://github.com/microsoft/PowerPlatformConnectors", + "name": "Power Platform Connectors", + "desc": "Power Platform Connectors - This is a repository for Microsoft Power Automate, Power Apps, and Azure Logic Apps connectors." + }, + { + "category": "Power Platform (Microsoft)", + "url": "https://github.com/microsoft/Power-Fx", + "name": "Microsoft Power Fx", + "desc": "Microsoft Power Fx - Power Fx Low Code programming language." + }, + { + "category": "Workato", + "url": "https://github.com/workato/custom_connector_docs", + "name": "Custom Connector Docs", + "desc": "Custom Connector Docs - Source files for Workato custom connector documentation." + }, + { + "category": "Power Platform (Microsoft)", + "url": "https://github.com/pnp/powerfx-samples", + "name": "Power Fx Samples", + "desc": "Power Fx Samples - This repository contains samples for Power Fx Low Code programming language." + }, + { + "category": "Power Platform (Microsoft)", + "url": "https://github.com/microsoft/PowerApps-Azure-Lab", + "name": "Power Apps & Azure Lab", + "desc": "Power Apps & Azure Lab - Repository to host the PowerApps Azure Lab." + }, + { + "category": "Power Platform (Microsoft)", + "url": "https://github.com/MicrosoftLearning/PL-900-Microsoft-Power-Platform-Fundamentals", + "name": "PL-900: Power Platform Fundamentals", + "desc": "PL-900: Power Platform Fundamentals - Power Platform Fundamentals course materials." + }, + { + "category": "Workato", + "url": "https://github.com/workato/full-embed-sample", + "name": "Embedding Guide", + "desc": "Embedding Guide - A guided example on how to use Workato embedded." + }, + { + "category": "Power Platform (Microsoft)", + "url": "https://github.com/pnp/powerapps-samples", + "name": "Power Apps Samples", + "desc": "Power Apps Samples - Contains curated community Microsoft Power App samples." + }, + { + "category": "Power Platform (Microsoft)", + "url": "https://github.com/Eickhel/PowerApps-samples", + "name": "PowerApps Samples", + "desc": "PowerApps Samples - Power Apps samples by Power Nimbus." + }, + { + "category": "Power Platform (Microsoft)", + "url": "https://github.com/iAmManCat/PowerApps-Branding-Template", + "name": "Power Apps Branding Template", + "desc": "Power Apps Branding Template - A template to empower developers and reduce time wasted on control changes." + }, + { + "category": "Power Platform (Microsoft)", + "url": "https://github.com/pnp/sp-power-platform-solutions", + "name": "SharePoint Power Platform Solutions", + "desc": "SharePoint Power Platform Solutions - Sample PowerApps solutions designed to be used in SharePoint context." + }, + { + "category": "Power Platform (Microsoft)", + "url": "https://github.com/pnp/powerautomate-samples", + "name": "Power Automate Samples", + "desc": "Power Automate Samples - Contains curated community samples for Microsoft Power Automate." + }, + { + "category": "Power Platform (Microsoft)", + "url": "https://github.com/wortell/PowerAutomate-AutomatischeReistijd", + "name": "Automatic travel time", + "desc": "Automatic travel time - Automatic travel time in your Office 365 calendar." + }, + { + "category": "Power Platform (Microsoft)", + "url": "https://github.com/ericsche/MCinTeams", + "name": "Message Center in Teams", + "desc": "Message Center in Teams - Message Center in Teams is a simple PowerAutomate Solution to gather Message Center Announcement and post them in a Teams Channel." + }, + { + "category": "Power Platform (Microsoft)", + "url": "https://github.com/ferrybouwman/Power-BI-Read-Only-REST-API", + "name": "Consume Power BI", + "desc": "Consume Power BI - Solution based on either Powershell or Power Automate (Flow) to consume the recently released Power BI Asynchronous Unified Scanning API." + }, + { + "category": "Power Platform (Microsoft)", + "url": "https://github.com/vaibhav21791/PostListItemToTwitter", + "name": "Post List Item To Twitter", + "desc": "Post List Item To Twitter - A Microsoft Power Automate Flow to Post a SharePoint List Item to Twitter along with media content." + }, + { + "category": "Workato", + "url": "https://www.workato.com/solutions", + "name": "Solution Marketplace", + "desc": "Solution Marketplace - A curated list of ready-to-use solutions built by Workato and vendors." + }, + { + "category": "Workato", + "url": "https://support.workato.com/en/support/solutions", + "name": "Support History", + "desc": "Support History - A public repository of resolved support tickets to help tackle issues." + }, + { + "category": "Power Platform (Microsoft)", + "url": "https://powerusers.microsoft.com/t5/Power-Apps-Community/ct-p/PowerApps1", + "name": "Microsoft Power Apps Official Community", + "desc": "Microsoft Power Apps Official Community" + }, + { + "category": "Power Platform (Microsoft)", + "url": "https://powerusers.microsoft.com/t5/Microsoft-Power-Automate/ct-p/MPACommunity", + "name": "Microsoft Power Automate Official Community", + "desc": "Microsoft Power Automate Official Community" + }, + { + "category": "Power Platform (Microsoft)", + "url": "https://powerusers.microsoft.com/t5/Power-Virtual-Agents-Community/ct-p/PVACommunity", + "name": "Microsoft Power Virtual Agents Official Community", + "desc": "Microsoft Power Virtual Agents Official Community" + }, + { + "category": "Power Platform (Microsoft)", + "url": "https://community.powerbi.com/", + "name": "Microsoft Power BI Official Community", + "desc": "Microsoft Power BI Official Community" + }, + { + "category": "Power Platform (Microsoft)", + "url": "https://powp.co/", + "name": "PowP.Co Discord Community", + "desc": "PowP.Co Discord Community - A Discord community of Power Platform enthusiasts." + }, + { + "category": "Workato", + "url": "https://community.workato.com/", + "name": "Workato Communities", + "desc": "Workato Communities - The official Workato communities website." + }, + { + "category": "Workato", + "url": "https://systematic.workato.com/", + "name": "Systematic", + "desc": "Systematic - The only community for business systems." + }, + { + "category": "Power Platform (Microsoft)", + "url": "https://zenity.io/blog", + "name": "Zenity", + "desc": "Zenity - Low Code security and governance." + }, + { + "category": "Power Platform (Microsoft)", + "url": "https://www.darkreading.com/edge-articles/addressing-the-low-code-security-elephant-in-the-room", + "name": "Addressing the Low Code Security Elephant in the Room", + "desc": "Addressing the Low Code Security Elephant in the Room - The shared responsibility model for Low Code applications." + }, + { + "category": "Power Platform (Microsoft)", + "url": "https://blog.powp.co/", + "name": "PowPco", + "desc": "PowPco - Single-stop community for everything Power Platform Community related." + }, + { + "category": "Workato", + "url": "https://www.workato.com/the-connector/", + "name": "The Connector", + "desc": "The Connector - Workato blog on Business Automation." + }, + { + "category": "Power Platform (Microsoft)", + "url": "https://github.com/Power-Maverick/awesome-power-platform", + "name": "Awesome Microsoft Power Platform", + "desc": "Awesome Microsoft Power Platform - A collection of awesome things regarding the Power Platform ecosystem." + }, + { + "category": "Power Platform (Microsoft)", + "url": "https://github.com/valentin-vogel/awesome-nocode-lowcode", + "name": "Awesome No Code Low Code", + "desc": "Awesome No Code Low Code - A collection of awesome No Code and Low Code resources." + } +] \ No newline at end of file diff --git a/components/fluent-ext/fluentqa-md/low-code.html b/components/fluent-ext/fluentqa-md/low-code.html new file mode 100644 index 0000000..758e881 --- /dev/null +++ b/components/fluent-ext/fluentqa-md/low-code.html @@ -0,0 +1,6074 @@ +

Awesome-no-code-tools

+

This awesome list links relevant tools for required to make apps/sites/chatbot and any digital tools without code!

+

I know that some of you are thinking "What is awesome without code? on Github???" But you never know when having such a tool might become handy.

+

This list is based on the incredible work done by Louis Veyret & Clément Barberousse and published as a google sheet. I am saving it here as a safekeeping and to maintain it. +Originally published as

+
+

Outils pour créer des sites web, applications mobiles, chatbot sans coder. +Par Louis Veyret & Clément Barberousse +Source : https://docs.google.com/spreadsheets/d/1QRhocTMg1cZAZyWz5vznqg6KdZrzU-b557Il8p0Q7HM/edit#gid=1754454108

+
+

Awesome list

+

Analytics

+ +

Automation

+
    +
  • Zapier - Connect and automate 500+ web apps
  • +
  • Integromat - The glue of the internet
  • +
  • IFTTT - Do more with the services you love
  • +
  • ActionDesk - Build powerful automations with your spreadsheet skills
  • +
  • Microsoft Flow - Automate tasks by integrating your favorite apps
  • +
  • Wayscript - A rapid scripting platform with drag-n-drop interface for Python and Javascript
  • +
  • Tray - Advanced integration platform for connecting up the tools you use every day
  • +
  • Automate Io - Put your business on autopilot. Connect 100+ business apps.
  • +
  • Blockspring - Supercharge your list building, reporting, and landing pages.
  • +
  • Oplim - Custom tasks on your website with zero code
  • +
  • Diagram - Nocode backend API builder with MongoDB and Firestore
  • +
  • Outfunnel - Keep customer data in sync across sales and marketing tools
  • +
+

Automation, Scrapers

+ +

Business Apps

+
    +
  • Betty Blocks - No-code enterprise application development
  • +
  • AppSheet - Intelligent no-code app development platform
  • +
  • Quick Base - Best way to manage data and automate processes, so you can accomplish more
  • +
  • Zoho Creator - Custom apps to run your business.
  • +
  • Calcapp - Build apps with your spreadsheet skills
  • +
+

Chatbots

+
    +
  • Manychat - Create a Messenger bot in minutes
  • +
  • It's Alive - Create a Facebook bot in minutes
  • +
  • Chatfuel - Create chatbots for your audience
  • +
  • Landbot - Lead generation landing page as chatbot
  • +
  • Botsify - Create your own automated chatbot online
  • +
  • Chatamo - Create intelligent voice and chatbot for marketing and sales
  • +
  • Flow XO - Create a chatbot with zero coding skills required
  • +
  • Smooch - Instantly deploy yout bots wherever users are
  • +
  • Rulai - AI Chatbot to deliver Scalable Self Service
  • +
+

Collaboration

+
    +
  • Notion - All-in-one workspace - notes, tasks, wikis & databases
  • +
  • Trello - All-in-one workspace and collaboration for businesses
  • +
+

Collaboration, Internal

+
    +
  • Quip - One place for all your team's work
  • +
+

CRM

+
    +
  • Salesflare - Simple & powerful CRM for small businesses
  • +
  • Pipedrive - CRM Gestion de leads en pipeline
  • +
+

CRM, Marketing

+
    +
  • Hubspot - A full platform of marketing, sales, customer service and CRM software
  • +
+

Customer Support

+
    +
  • Drift - Customer support chatbot
  • +
  • Crisp - Customer support directly in your website
  • +
+

Customer Support, Marketing, CRM

+
    +
  • Intercom - All-in-one customer support
  • +
+

Data, Marketing

+
    +
  • Hotjar - See how your visitors are really using your site
  • +
+

Database

+
    +
  • Airtable - Realtime spreadsheet database hybrid
  • +
  • NocoDB - Free & Open Source Airtable alternative - turns any SQL database into smart spreadsheet
  • +
  • Trevor - Query your live data, without code
  • +
+

Design

+
    +
  • Figma - The first interface design tool with real-time collaboration
  • +
  • unDraw - Free, open-source illustrations for everyone
  • +
+

Design, Websites

+
    +
  • Webflow - All-in-one web design platform
  • +
+

Ecommerce

+
    +
  • Shopify - Build your ecommerce store
  • +
  • Podia - Easily sell memberships, online courses and digital products
  • +
  • Monto - Product reviews for Webflow
  • +
  • Hingeto - Start your own Amazon-style marketplace
  • +
  • Volusion - Ecommerce website store & shopping cart software
  • +
+

Email

+
    +
  • Revue - Editorial newsletters tool for writers and publishers
  • +
  • Sendgrid - Email delivery service
  • +
  • Postcards - Create awesome emails with drag & drop simplicity
  • +
  • BEE - Create beautiful emails, fast.
  • +
  • Stripo - Free email template builder
  • +
  • Substack - Paid newsletters made simple
  • +
  • Mailchimp - Free emailing software
  • +
  • Converkit - Send automated emailing campaigns
  • +
+

Forms

+
    +
  • Typeform - Build beautiful conversational forms
  • +
  • Google Forms - Free forms from Google that connect directly to Google Sheets
  • +
  • Jotform - Online form builder & form creator
  • +
  • Paperform - Beautiful forms that feel like yours
  • +
+

Internal

+
    +
  • Coda - Build docs as powerful as apps
  • +
  • Nuclino - Knowledge base and collaboration
  • +
  • Contractbook - Efficient contract management
  • +
+

Internal, Web Apps

+
    +
  • Retool - Build custom internal tools in minutes
  • +
+

Landing Pages

+
    +
  • Landen - Beautiful Landing Pages. Designed Instantly
  • +
  • Launchaco - Simple landing pages for your startup
  • +
  • Leadpages - Landing page builder & lead gen software
  • +
  • Instapage - Leanding pages, up to 6x more conversions
  • +
  • Unbounce - Landing Pages - More Powerful Customization
  • +
  • Leeflets - Functional landing pages for all kind of things
  • +
  • RIVYT - Websites for Video Creators
  • +
+

Landing Pages, Websites

+
    +
  • Carrd - Build simple, fully responsive one-page sites
  • +
+

Marketing

+
    +
  • Outgrow - Boost your marketing with highly interactive content
  • +
  • Rewardful - Instant Affiliate & Referral Programs for Stripe
  • +
  • Fortvision - Create interactive experiences that lead to higher conversions
  • +
+

Marketplace

+
    +
  • Sharetribe - Create your first marketplace without code
  • +
+

Membership, Websites

+
    +
  • Memberstack - Memberships & gated content for websites
  • +
+

Mobile Apps

+
    +
  • Dropsource - Build and publish native mobile app without coding
  • +
  • Glide - Create mobile apps from Google Sheets
  • +
  • Lightwell - A simple tool for creating native iOS apps on Mac.
  • +
  • Adalo - Create apps as easy as making a slide deck
  • +
  • App Inventor - Create powerful Android apps without code using blocs coding
  • +
  • Thunkable - Create beautiful and powerful mobile apps without code
  • +
+

Mobile Apps, Video Games

+ +

Payment

+
    +
  • Stripe - Payment integration and management
  • +
  • Paypal - Send Money, Online or Set up a Merchant Store
  • +
  • Buy me a coffee - Easy way to support a projet
  • +
+

Payment, Ecommerce

+
    +
  • Gumroad - Sell anything directly to anyone
  • +
+

Payment, Membership

+
    +
  • Patreon - Easy way to contribute to a project
  • +
+

Podcast

+
    +
  • Anchor - The best way to create your podcast
  • +
+

Scrapers

+ +

Video

+
    +
  • Loom - Seamless screen, mic, and camera recording for Chrome
  • +
+

Voice

+
    +
  • Voiceflow - Build voice apps in your browser without coding
  • +
  • Vuix - Design voice apps in minutes
  • +
  • ApitoBot - Create an Alexa Skill or Google Action in minutes
  • +
+

VR

+
    +
  • Instavr - Make your VR apps in minutes
  • +
+

Web Apps

+
    +
  • Bubble - Build a fully functional web app without any code.
  • +
  • Corvid - Build advanced web applications, hassle-free
  • +
  • Boundless - Create dynamic, multisided web apps without coding
  • +
+

Websites

+
    +
  • Sheet2site - Turn your Google Sheets into a website
  • +
  • Universe - Make an awesome website from your phone
  • +
  • Table2Site - Generate websites from your Airtable base
  • +
  • Squarespace - All-in-one platform to build a beautiful online e-commerce
  • +
  • Wix - Free website builder
  • +
  • IM Creator - Free website builder
  • +
  • Weebly - Build a free website or online store
  • +
  • Webnode - Easy & Free website maker
  • +
  • Jimdo - Your website builder
  • +
  • Bookmark - Create a Website with AI
  • +
  • Strikingly - Make a website in minutes
  • +
  • Tilda - Create beautiful websites without any code
  • +
+

Websites, Membership

+
    +
  • Memberspace - Turn your audience into paying members.
  • +
+ +

Awesome-no-code-tools

+

This awesome list links relevant tools for required to make apps/sites/chatbot and any digital tools without code!

+

I know that some of you are thinking "What is awesome without code? on Github???" But you never know when having such a tool might become handy.

+

This list is based on the incredible work done by Louis Veyret & Clément Barberousse and published as a google sheet. I am saving it here as a safekeeping and to maintain it. +Originally published as

+
+

Outils pour créer des sites web, applications mobiles, chatbot sans coder. +Par Louis Veyret & Clément Barberousse +Source : https://docs.google.com/spreadsheets/d/1QRhocTMg1cZAZyWz5vznqg6KdZrzU-b557Il8p0Q7HM/edit#gid=1754454108

+
+

Awesome list

+

Analytics

+ +

Automation

+
    +
  • Zapier - Connect and automate 500+ web apps
  • +
  • Integromat - The glue of the internet
  • +
  • IFTTT - Do more with the services you love
  • +
  • ActionDesk - Build powerful automations with your spreadsheet skills
  • +
  • Microsoft Flow - Automate tasks by integrating your favorite apps
  • +
  • Wayscript - A rapid scripting platform with drag-n-drop interface for Python and Javascript
  • +
  • Tray - Advanced integration platform for connecting up the tools you use every day
  • +
  • Automate Io - Put your business on autopilot. Connect 100+ business apps.
  • +
  • Blockspring - Supercharge your list building, reporting, and landing pages.
  • +
  • Oplim - Custom tasks on your website with zero code
  • +
  • Diagram - Nocode backend API builder with MongoDB and Firestore
  • +
  • Outfunnel - Keep customer data in sync across sales and marketing tools
  • +
+

Automation, Scrapers

+ +

Business Apps

+
    +
  • Betty Blocks - No-code enterprise application development
  • +
  • AppSheet - Intelligent no-code app development platform
  • +
  • Quick Base - Best way to manage data and automate processes, so you can accomplish more
  • +
  • Zoho Creator - Custom apps to run your business.
  • +
  • Calcapp - Build apps with your spreadsheet skills
  • +
+

Chatbots

+
    +
  • Manychat - Create a Messenger bot in minutes
  • +
  • It's Alive - Create a Facebook bot in minutes
  • +
  • Chatfuel - Create chatbots for your audience
  • +
  • Landbot - Lead generation landing page as chatbot
  • +
  • Botsify - Create your own automated chatbot online
  • +
  • Chatamo - Create intelligent voice and chatbot for marketing and sales
  • +
  • Flow XO - Create a chatbot with zero coding skills required
  • +
  • Smooch - Instantly deploy yout bots wherever users are
  • +
  • Rulai - AI Chatbot to deliver Scalable Self Service
  • +
+

Collaboration

+
    +
  • Notion - All-in-one workspace - notes, tasks, wikis & databases
  • +
  • Trello - All-in-one workspace and collaboration for businesses
  • +
+

Collaboration, Internal

+
    +
  • Quip - One place for all your team's work
  • +
+

CRM

+
    +
  • Salesflare - Simple & powerful CRM for small businesses
  • +
  • Pipedrive - CRM Gestion de leads en pipeline
  • +
+

CRM, Marketing

+
    +
  • Hubspot - A full platform of marketing, sales, customer service and CRM software
  • +
+

Customer Support

+
    +
  • Drift - Customer support chatbot
  • +
  • Crisp - Customer support directly in your website
  • +
+

Customer Support, Marketing, CRM

+
    +
  • Intercom - All-in-one customer support
  • +
+

Data, Marketing

+
    +
  • Hotjar - See how your visitors are really using your site
  • +
+

Database

+
    +
  • Airtable - Realtime spreadsheet database hybrid
  • +
  • NocoDB - Free & Open Source Airtable alternative - turns any SQL database into smart spreadsheet
  • +
  • Trevor - Query your live data, without code
  • +
+

Design

+
    +
  • Figma - The first interface design tool with real-time collaboration
  • +
  • unDraw - Free, open-source illustrations for everyone
  • +
+

Design, Websites

+
    +
  • Webflow - All-in-one web design platform
  • +
+

Ecommerce

+
    +
  • Shopify - Build your ecommerce store
  • +
  • Podia - Easily sell memberships, online courses and digital products
  • +
  • Monto - Product reviews for Webflow
  • +
  • Hingeto - Start your own Amazon-style marketplace
  • +
  • Volusion - Ecommerce website store & shopping cart software
  • +
+

Email

+
    +
  • Revue - Editorial newsletters tool for writers and publishers
  • +
  • Sendgrid - Email delivery service
  • +
  • Postcards - Create awesome emails with drag & drop simplicity
  • +
  • BEE - Create beautiful emails, fast.
  • +
  • Stripo - Free email template builder
  • +
  • Substack - Paid newsletters made simple
  • +
  • Mailchimp - Free emailing software
  • +
  • Converkit - Send automated emailing campaigns
  • +
+

Forms

+
    +
  • Typeform - Build beautiful conversational forms
  • +
  • Google Forms - Free forms from Google that connect directly to Google Sheets
  • +
  • Jotform - Online form builder & form creator
  • +
  • Paperform - Beautiful forms that feel like yours
  • +
+

Internal

+
    +
  • Coda - Build docs as powerful as apps
  • +
  • Nuclino - Knowledge base and collaboration
  • +
  • Contractbook - Efficient contract management
  • +
+

Internal, Web Apps

+
    +
  • Retool - Build custom internal tools in minutes
  • +
+

Landing Pages

+
    +
  • Landen - Beautiful Landing Pages. Designed Instantly
  • +
  • Launchaco - Simple landing pages for your startup
  • +
  • Leadpages - Landing page builder & lead gen software
  • +
  • Instapage - Leanding pages, up to 6x more conversions
  • +
  • Unbounce - Landing Pages - More Powerful Customization
  • +
  • Leeflets - Functional landing pages for all kind of things
  • +
  • RIVYT - Websites for Video Creators
  • +
+

Landing Pages, Websites

+
    +
  • Carrd - Build simple, fully responsive one-page sites
  • +
+

Marketing

+
    +
  • Outgrow - Boost your marketing with highly interactive content
  • +
  • Rewardful - Instant Affiliate & Referral Programs for Stripe
  • +
  • Fortvision - Create interactive experiences that lead to higher conversions
  • +
+

Marketplace

+
    +
  • Sharetribe - Create your first marketplace without code
  • +
+

Membership, Websites

+
    +
  • Memberstack - Memberships & gated content for websites
  • +
+

Mobile Apps

+
    +
  • Dropsource - Build and publish native mobile app without coding
  • +
  • Glide - Create mobile apps from Google Sheets
  • +
  • Lightwell - A simple tool for creating native iOS apps on Mac.
  • +
  • Adalo - Create apps as easy as making a slide deck
  • +
  • App Inventor - Create powerful Android apps without code using blocs coding
  • +
  • Thunkable - Create beautiful and powerful mobile apps without code
  • +
+

Mobile Apps, Video Games

+ +

Payment

+
    +
  • Stripe - Payment integration and management
  • +
  • Paypal - Send Money, Online or Set up a Merchant Store
  • +
  • Buy me a coffee - Easy way to support a projet
  • +
+

Payment, Ecommerce

+
    +
  • Gumroad - Sell anything directly to anyone
  • +
+

Payment, Membership

+
    +
  • Patreon - Easy way to contribute to a project
  • +
+

Podcast

+
    +
  • Anchor - The best way to create your podcast
  • +
+

Scrapers

+ +

Video

+
    +
  • Loom - Seamless screen, mic, and camera recording for Chrome
  • +
+

Voice

+
    +
  • Voiceflow - Build voice apps in your browser without coding
  • +
  • Vuix - Design voice apps in minutes
  • +
  • ApitoBot - Create an Alexa Skill or Google Action in minutes
  • +
+

VR

+
    +
  • Instavr - Make your VR apps in minutes
  • +
+

Web Apps

+
    +
  • Bubble - Build a fully functional web app without any code.
  • +
  • Corvid - Build advanced web applications, hassle-free
  • +
  • Boundless - Create dynamic, multisided web apps without coding
  • +
+

Websites

+
    +
  • Sheet2site - Turn your Google Sheets into a website
  • +
  • Universe - Make an awesome website from your phone
  • +
  • Table2Site - Generate websites from your Airtable base
  • +
  • Squarespace - All-in-one platform to build a beautiful online e-commerce
  • +
  • Wix - Free website builder
  • +
  • IM Creator - Free website builder
  • +
  • Weebly - Build a free website or online store
  • +
  • Webnode - Easy & Free website maker
  • +
  • Jimdo - Your website builder
  • +
  • Bookmark - Create a Website with AI
  • +
  • Strikingly - Make a website in minutes
  • +
  • Tilda - Create beautiful websites without any code
  • +
+

Websites, Membership

+
    +
  • Memberspace - Turn your audience into paying members.
  • +
+ +

Awesome-no-code-tools

+

This awesome list links relevant tools for required to make apps/sites/chatbot and any digital tools without code!

+

I know that some of you are thinking "What is awesome without code? on Github???" But you never know when having such a tool might become handy.

+

This list is based on the incredible work done by Louis Veyret & Clément Barberousse and published as a google sheet. I am saving it here as a safekeeping and to maintain it. +Originally published as

+
+

Outils pour créer des sites web, applications mobiles, chatbot sans coder. +Par Louis Veyret & Clément Barberousse +Source : https://docs.google.com/spreadsheets/d/1QRhocTMg1cZAZyWz5vznqg6KdZrzU-b557Il8p0Q7HM/edit#gid=1754454108

+
+

Awesome list

+

Analytics

+ +

Automation

+
    +
  • Zapier - Connect and automate 500+ web apps
  • +
  • Integromat - The glue of the internet
  • +
  • IFTTT - Do more with the services you love
  • +
  • ActionDesk - Build powerful automations with your spreadsheet skills
  • +
  • Microsoft Flow - Automate tasks by integrating your favorite apps
  • +
  • Wayscript - A rapid scripting platform with drag-n-drop interface for Python and Javascript
  • +
  • Tray - Advanced integration platform for connecting up the tools you use every day
  • +
  • Automate Io - Put your business on autopilot. Connect 100+ business apps.
  • +
  • Blockspring - Supercharge your list building, reporting, and landing pages.
  • +
  • Oplim - Custom tasks on your website with zero code
  • +
  • Diagram - Nocode backend API builder with MongoDB and Firestore
  • +
  • Outfunnel - Keep customer data in sync across sales and marketing tools
  • +
+

Automation, Scrapers

+ +

Business Apps

+
    +
  • Betty Blocks - No-code enterprise application development
  • +
  • AppSheet - Intelligent no-code app development platform
  • +
  • Quick Base - Best way to manage data and automate processes, so you can accomplish more
  • +
  • Zoho Creator - Custom apps to run your business.
  • +
  • Calcapp - Build apps with your spreadsheet skills
  • +
+

Chatbots

+
    +
  • Manychat - Create a Messenger bot in minutes
  • +
  • It's Alive - Create a Facebook bot in minutes
  • +
  • Chatfuel - Create chatbots for your audience
  • +
  • Landbot - Lead generation landing page as chatbot
  • +
  • Botsify - Create your own automated chatbot online
  • +
  • Chatamo - Create intelligent voice and chatbot for marketing and sales
  • +
  • Flow XO - Create a chatbot with zero coding skills required
  • +
  • Smooch - Instantly deploy yout bots wherever users are
  • +
  • Rulai - AI Chatbot to deliver Scalable Self Service
  • +
+

Collaboration

+
    +
  • Notion - All-in-one workspace - notes, tasks, wikis & databases
  • +
  • Trello - All-in-one workspace and collaboration for businesses
  • +
+

Collaboration, Internal

+
    +
  • Quip - One place for all your team's work
  • +
+

CRM

+
    +
  • Salesflare - Simple & powerful CRM for small businesses
  • +
  • Pipedrive - CRM Gestion de leads en pipeline
  • +
+

CRM, Marketing

+
    +
  • Hubspot - A full platform of marketing, sales, customer service and CRM software
  • +
+

Customer Support

+
    +
  • Drift - Customer support chatbot
  • +
  • Crisp - Customer support directly in your website
  • +
+

Customer Support, Marketing, CRM

+
    +
  • Intercom - All-in-one customer support
  • +
+

Data, Marketing

+
    +
  • Hotjar - See how your visitors are really using your site
  • +
+

Database

+
    +
  • Airtable - Realtime spreadsheet database hybrid
  • +
  • NocoDB - Free & Open Source Airtable alternative - turns any SQL database into smart spreadsheet
  • +
  • Trevor - Query your live data, without code
  • +
+

Design

+
    +
  • Figma - The first interface design tool with real-time collaboration
  • +
  • unDraw - Free, open-source illustrations for everyone
  • +
+

Design, Websites

+
    +
  • Webflow - All-in-one web design platform
  • +
+

Ecommerce

+
    +
  • Shopify - Build your ecommerce store
  • +
  • Podia - Easily sell memberships, online courses and digital products
  • +
  • Monto - Product reviews for Webflow
  • +
  • Hingeto - Start your own Amazon-style marketplace
  • +
  • Volusion - Ecommerce website store & shopping cart software
  • +
+

Email

+
    +
  • Revue - Editorial newsletters tool for writers and publishers
  • +
  • Sendgrid - Email delivery service
  • +
  • Postcards - Create awesome emails with drag & drop simplicity
  • +
  • BEE - Create beautiful emails, fast.
  • +
  • Stripo - Free email template builder
  • +
  • Substack - Paid newsletters made simple
  • +
  • Mailchimp - Free emailing software
  • +
  • Converkit - Send automated emailing campaigns
  • +
+

Forms

+
    +
  • Typeform - Build beautiful conversational forms
  • +
  • Google Forms - Free forms from Google that connect directly to Google Sheets
  • +
  • Jotform - Online form builder & form creator
  • +
  • Paperform - Beautiful forms that feel like yours
  • +
+

Internal

+
    +
  • Coda - Build docs as powerful as apps
  • +
  • Nuclino - Knowledge base and collaboration
  • +
  • Contractbook - Efficient contract management
  • +
+

Internal, Web Apps

+
    +
  • Retool - Build custom internal tools in minutes
  • +
+

Landing Pages

+
    +
  • Landen - Beautiful Landing Pages. Designed Instantly
  • +
  • Launchaco - Simple landing pages for your startup
  • +
  • Leadpages - Landing page builder & lead gen software
  • +
  • Instapage - Leanding pages, up to 6x more conversions
  • +
  • Unbounce - Landing Pages - More Powerful Customization
  • +
  • Leeflets - Functional landing pages for all kind of things
  • +
  • RIVYT - Websites for Video Creators
  • +
+

Landing Pages, Websites

+
    +
  • Carrd - Build simple, fully responsive one-page sites
  • +
+

Marketing

+
    +
  • Outgrow - Boost your marketing with highly interactive content
  • +
  • Rewardful - Instant Affiliate & Referral Programs for Stripe
  • +
  • Fortvision - Create interactive experiences that lead to higher conversions
  • +
+

Marketplace

+
    +
  • Sharetribe - Create your first marketplace without code
  • +
+

Membership, Websites

+
    +
  • Memberstack - Memberships & gated content for websites
  • +
+

Mobile Apps

+
    +
  • Dropsource - Build and publish native mobile app without coding
  • +
  • Glide - Create mobile apps from Google Sheets
  • +
  • Lightwell - A simple tool for creating native iOS apps on Mac.
  • +
  • Adalo - Create apps as easy as making a slide deck
  • +
  • App Inventor - Create powerful Android apps without code using blocs coding
  • +
  • Thunkable - Create beautiful and powerful mobile apps without code
  • +
+

Mobile Apps, Video Games

+ +

Payment

+
    +
  • Stripe - Payment integration and management
  • +
  • Paypal - Send Money, Online or Set up a Merchant Store
  • +
  • Buy me a coffee - Easy way to support a projet
  • +
+

Payment, Ecommerce

+
    +
  • Gumroad - Sell anything directly to anyone
  • +
+

Payment, Membership

+
    +
  • Patreon - Easy way to contribute to a project
  • +
+

Podcast

+
    +
  • Anchor - The best way to create your podcast
  • +
+

Scrapers

+ +

Video

+
    +
  • Loom - Seamless screen, mic, and camera recording for Chrome
  • +
+

Voice

+
    +
  • Voiceflow - Build voice apps in your browser without coding
  • +
  • Vuix - Design voice apps in minutes
  • +
  • ApitoBot - Create an Alexa Skill or Google Action in minutes
  • +
+

VR

+
    +
  • Instavr - Make your VR apps in minutes
  • +
+

Web Apps

+
    +
  • Bubble - Build a fully functional web app without any code.
  • +
  • Corvid - Build advanced web applications, hassle-free
  • +
  • Boundless - Create dynamic, multisided web apps without coding
  • +
+

Websites

+
    +
  • Sheet2site - Turn your Google Sheets into a website
  • +
  • Universe - Make an awesome website from your phone
  • +
  • Table2Site - Generate websites from your Airtable base
  • +
  • Squarespace - All-in-one platform to build a beautiful online e-commerce
  • +
  • Wix - Free website builder
  • +
  • IM Creator - Free website builder
  • +
  • Weebly - Build a free website or online store
  • +
  • Webnode - Easy & Free website maker
  • +
  • Jimdo - Your website builder
  • +
  • Bookmark - Create a Website with AI
  • +
  • Strikingly - Make a website in minutes
  • +
  • Tilda - Create beautiful websites without any code
  • +
+

Websites, Membership

+
    +
  • Memberspace - Turn your audience into paying members.
  • +
+ +

Awesome-no-code-tools

+

This awesome list links relevant tools for required to make apps/sites/chatbot and any digital tools without code!

+

I know that some of you are thinking "What is awesome without code? on Github???" But you never know when having such a tool might become handy.

+

This list is based on the incredible work done by Louis Veyret & Clément Barberousse and published as a google sheet. I am saving it here as a safekeeping and to maintain it. +Originally published as

+
+

Outils pour créer des sites web, applications mobiles, chatbot sans coder. +Par Louis Veyret & Clément Barberousse +Source : https://docs.google.com/spreadsheets/d/1QRhocTMg1cZAZyWz5vznqg6KdZrzU-b557Il8p0Q7HM/edit#gid=1754454108

+
+

Awesome list

+

Analytics

+ +

Automation

+
    +
  • Zapier - Connect and automate 500+ web apps
  • +
  • Integromat - The glue of the internet
  • +
  • IFTTT - Do more with the services you love
  • +
  • ActionDesk - Build powerful automations with your spreadsheet skills
  • +
  • Microsoft Flow - Automate tasks by integrating your favorite apps
  • +
  • Wayscript - A rapid scripting platform with drag-n-drop interface for Python and Javascript
  • +
  • Tray - Advanced integration platform for connecting up the tools you use every day
  • +
  • Automate Io - Put your business on autopilot. Connect 100+ business apps.
  • +
  • Blockspring - Supercharge your list building, reporting, and landing pages.
  • +
  • Oplim - Custom tasks on your website with zero code
  • +
  • Diagram - Nocode backend API builder with MongoDB and Firestore
  • +
  • Outfunnel - Keep customer data in sync across sales and marketing tools
  • +
+

Automation, Scrapers

+ +

Business Apps

+
    +
  • Betty Blocks - No-code enterprise application development
  • +
  • AppSheet - Intelligent no-code app development platform
  • +
  • Quick Base - Best way to manage data and automate processes, so you can accomplish more
  • +
  • Zoho Creator - Custom apps to run your business.
  • +
  • Calcapp - Build apps with your spreadsheet skills
  • +
+

Chatbots

+
    +
  • Manychat - Create a Messenger bot in minutes
  • +
  • It's Alive - Create a Facebook bot in minutes
  • +
  • Chatfuel - Create chatbots for your audience
  • +
  • Landbot - Lead generation landing page as chatbot
  • +
  • Botsify - Create your own automated chatbot online
  • +
  • Chatamo - Create intelligent voice and chatbot for marketing and sales
  • +
  • Flow XO - Create a chatbot with zero coding skills required
  • +
  • Smooch - Instantly deploy yout bots wherever users are
  • +
  • Rulai - AI Chatbot to deliver Scalable Self Service
  • +
+

Collaboration

+
    +
  • Notion - All-in-one workspace - notes, tasks, wikis & databases
  • +
  • Trello - All-in-one workspace and collaboration for businesses
  • +
+

Collaboration, Internal

+
    +
  • Quip - One place for all your team's work
  • +
+

CRM

+
    +
  • Salesflare - Simple & powerful CRM for small businesses
  • +
  • Pipedrive - CRM Gestion de leads en pipeline
  • +
+

CRM, Marketing

+
    +
  • Hubspot - A full platform of marketing, sales, customer service and CRM software
  • +
+

Customer Support

+
    +
  • Drift - Customer support chatbot
  • +
  • Crisp - Customer support directly in your website
  • +
+

Customer Support, Marketing, CRM

+
    +
  • Intercom - All-in-one customer support
  • +
+

Data, Marketing

+
    +
  • Hotjar - See how your visitors are really using your site
  • +
+

Database

+
    +
  • Airtable - Realtime spreadsheet database hybrid
  • +
  • NocoDB - Free & Open Source Airtable alternative - turns any SQL database into smart spreadsheet
  • +
  • Trevor - Query your live data, without code
  • +
+

Design

+
    +
  • Figma - The first interface design tool with real-time collaboration
  • +
  • unDraw - Free, open-source illustrations for everyone
  • +
+

Design, Websites

+
    +
  • Webflow - All-in-one web design platform
  • +
+

Ecommerce

+
    +
  • Shopify - Build your ecommerce store
  • +
  • Podia - Easily sell memberships, online courses and digital products
  • +
  • Monto - Product reviews for Webflow
  • +
  • Hingeto - Start your own Amazon-style marketplace
  • +
  • Volusion - Ecommerce website store & shopping cart software
  • +
+

Email

+
    +
  • Revue - Editorial newsletters tool for writers and publishers
  • +
  • Sendgrid - Email delivery service
  • +
  • Postcards - Create awesome emails with drag & drop simplicity
  • +
  • BEE - Create beautiful emails, fast.
  • +
  • Stripo - Free email template builder
  • +
  • Substack - Paid newsletters made simple
  • +
  • Mailchimp - Free emailing software
  • +
  • Converkit - Send automated emailing campaigns
  • +
+

Forms

+
    +
  • Typeform - Build beautiful conversational forms
  • +
  • Google Forms - Free forms from Google that connect directly to Google Sheets
  • +
  • Jotform - Online form builder & form creator
  • +
  • Paperform - Beautiful forms that feel like yours
  • +
+

Internal

+
    +
  • Coda - Build docs as powerful as apps
  • +
  • Nuclino - Knowledge base and collaboration
  • +
  • Contractbook - Efficient contract management
  • +
+

Internal, Web Apps

+
    +
  • Retool - Build custom internal tools in minutes
  • +
+

Landing Pages

+
    +
  • Landen - Beautiful Landing Pages. Designed Instantly
  • +
  • Launchaco - Simple landing pages for your startup
  • +
  • Leadpages - Landing page builder & lead gen software
  • +
  • Instapage - Leanding pages, up to 6x more conversions
  • +
  • Unbounce - Landing Pages - More Powerful Customization
  • +
  • Leeflets - Functional landing pages for all kind of things
  • +
  • RIVYT - Websites for Video Creators
  • +
+

Landing Pages, Websites

+
    +
  • Carrd - Build simple, fully responsive one-page sites
  • +
+

Marketing

+
    +
  • Outgrow - Boost your marketing with highly interactive content
  • +
  • Rewardful - Instant Affiliate & Referral Programs for Stripe
  • +
  • Fortvision - Create interactive experiences that lead to higher conversions
  • +
+

Marketplace

+
    +
  • Sharetribe - Create your first marketplace without code
  • +
+

Membership, Websites

+
    +
  • Memberstack - Memberships & gated content for websites
  • +
+

Mobile Apps

+
    +
  • Dropsource - Build and publish native mobile app without coding
  • +
  • Glide - Create mobile apps from Google Sheets
  • +
  • Lightwell - A simple tool for creating native iOS apps on Mac.
  • +
  • Adalo - Create apps as easy as making a slide deck
  • +
  • App Inventor - Create powerful Android apps without code using blocs coding
  • +
  • Thunkable - Create beautiful and powerful mobile apps without code
  • +
+

Mobile Apps, Video Games

+ +

Payment

+
    +
  • Stripe - Payment integration and management
  • +
  • Paypal - Send Money, Online or Set up a Merchant Store
  • +
  • Buy me a coffee - Easy way to support a projet
  • +
+

Payment, Ecommerce

+
    +
  • Gumroad - Sell anything directly to anyone
  • +
+

Payment, Membership

+
    +
  • Patreon - Easy way to contribute to a project
  • +
+

Podcast

+
    +
  • Anchor - The best way to create your podcast
  • +
+

Scrapers

+ +

Video

+
    +
  • Loom - Seamless screen, mic, and camera recording for Chrome
  • +
+

Voice

+
    +
  • Voiceflow - Build voice apps in your browser without coding
  • +
  • Vuix - Design voice apps in minutes
  • +
  • ApitoBot - Create an Alexa Skill or Google Action in minutes
  • +
+

VR

+
    +
  • Instavr - Make your VR apps in minutes
  • +
+

Web Apps

+
    +
  • Bubble - Build a fully functional web app without any code.
  • +
  • Corvid - Build advanced web applications, hassle-free
  • +
  • Boundless - Create dynamic, multisided web apps without coding
  • +
+

Websites

+
    +
  • Sheet2site - Turn your Google Sheets into a website
  • +
  • Universe - Make an awesome website from your phone
  • +
  • Table2Site - Generate websites from your Airtable base
  • +
  • Squarespace - All-in-one platform to build a beautiful online e-commerce
  • +
  • Wix - Free website builder
  • +
  • IM Creator - Free website builder
  • +
  • Weebly - Build a free website or online store
  • +
  • Webnode - Easy & Free website maker
  • +
  • Jimdo - Your website builder
  • +
  • Bookmark - Create a Website with AI
  • +
  • Strikingly - Make a website in minutes
  • +
  • Tilda - Create beautiful websites without any code
  • +
+

Websites, Membership

+
    +
  • Memberspace - Turn your audience into paying members.
  • +
+ +

Awesome-no-code-tools

+

This awesome list links relevant tools for required to make apps/sites/chatbot and any digital tools without code!

+

I know that some of you are thinking "What is awesome without code? on Github???" But you never know when having such a tool might become handy.

+

This list is based on the incredible work done by Louis Veyret & Clément Barberousse and published as a google sheet. I am saving it here as a safekeeping and to maintain it. +Originally published as

+
+

Outils pour créer des sites web, applications mobiles, chatbot sans coder. +Par Louis Veyret & Clément Barberousse +Source : https://docs.google.com/spreadsheets/d/1QRhocTMg1cZAZyWz5vznqg6KdZrzU-b557Il8p0Q7HM/edit#gid=1754454108

+
+

Awesome list

+

Analytics

+ +

Automation

+
    +
  • Zapier - Connect and automate 500+ web apps
  • +
  • Integromat - The glue of the internet
  • +
  • IFTTT - Do more with the services you love
  • +
  • ActionDesk - Build powerful automations with your spreadsheet skills
  • +
  • Microsoft Flow - Automate tasks by integrating your favorite apps
  • +
  • Wayscript - A rapid scripting platform with drag-n-drop interface for Python and Javascript
  • +
  • Tray - Advanced integration platform for connecting up the tools you use every day
  • +
  • Automate Io - Put your business on autopilot. Connect 100+ business apps.
  • +
  • Blockspring - Supercharge your list building, reporting, and landing pages.
  • +
  • Oplim - Custom tasks on your website with zero code
  • +
  • Diagram - Nocode backend API builder with MongoDB and Firestore
  • +
  • Outfunnel - Keep customer data in sync across sales and marketing tools
  • +
+

Automation, Scrapers

+ +

Business Apps

+
    +
  • Betty Blocks - No-code enterprise application development
  • +
  • AppSheet - Intelligent no-code app development platform
  • +
  • Quick Base - Best way to manage data and automate processes, so you can accomplish more
  • +
  • Zoho Creator - Custom apps to run your business.
  • +
  • Calcapp - Build apps with your spreadsheet skills
  • +
+

Chatbots

+
    +
  • Manychat - Create a Messenger bot in minutes
  • +
  • It's Alive - Create a Facebook bot in minutes
  • +
  • Chatfuel - Create chatbots for your audience
  • +
  • Landbot - Lead generation landing page as chatbot
  • +
  • Botsify - Create your own automated chatbot online
  • +
  • Chatamo - Create intelligent voice and chatbot for marketing and sales
  • +
  • Flow XO - Create a chatbot with zero coding skills required
  • +
  • Smooch - Instantly deploy yout bots wherever users are
  • +
  • Rulai - AI Chatbot to deliver Scalable Self Service
  • +
+

Collaboration

+
    +
  • Notion - All-in-one workspace - notes, tasks, wikis & databases
  • +
  • Trello - All-in-one workspace and collaboration for businesses
  • +
+

Collaboration, Internal

+
    +
  • Quip - One place for all your team's work
  • +
+

CRM

+
    +
  • Salesflare - Simple & powerful CRM for small businesses
  • +
  • Pipedrive - CRM Gestion de leads en pipeline
  • +
+

CRM, Marketing

+
    +
  • Hubspot - A full platform of marketing, sales, customer service and CRM software
  • +
+

Customer Support

+
    +
  • Drift - Customer support chatbot
  • +
  • Crisp - Customer support directly in your website
  • +
+

Customer Support, Marketing, CRM

+
    +
  • Intercom - All-in-one customer support
  • +
+

Data, Marketing

+
    +
  • Hotjar - See how your visitors are really using your site
  • +
+

Database

+
    +
  • Airtable - Realtime spreadsheet database hybrid
  • +
  • NocoDB - Free & Open Source Airtable alternative - turns any SQL database into smart spreadsheet
  • +
  • Trevor - Query your live data, without code
  • +
+

Design

+
    +
  • Figma - The first interface design tool with real-time collaboration
  • +
  • unDraw - Free, open-source illustrations for everyone
  • +
+

Design, Websites

+
    +
  • Webflow - All-in-one web design platform
  • +
+

Ecommerce

+
    +
  • Shopify - Build your ecommerce store
  • +
  • Podia - Easily sell memberships, online courses and digital products
  • +
  • Monto - Product reviews for Webflow
  • +
  • Hingeto - Start your own Amazon-style marketplace
  • +
  • Volusion - Ecommerce website store & shopping cart software
  • +
+

Email

+
    +
  • Revue - Editorial newsletters tool for writers and publishers
  • +
  • Sendgrid - Email delivery service
  • +
  • Postcards - Create awesome emails with drag & drop simplicity
  • +
  • BEE - Create beautiful emails, fast.
  • +
  • Stripo - Free email template builder
  • +
  • Substack - Paid newsletters made simple
  • +
  • Mailchimp - Free emailing software
  • +
  • Converkit - Send automated emailing campaigns
  • +
+

Forms

+
    +
  • Typeform - Build beautiful conversational forms
  • +
  • Google Forms - Free forms from Google that connect directly to Google Sheets
  • +
  • Jotform - Online form builder & form creator
  • +
  • Paperform - Beautiful forms that feel like yours
  • +
+

Internal

+
    +
  • Coda - Build docs as powerful as apps
  • +
  • Nuclino - Knowledge base and collaboration
  • +
  • Contractbook - Efficient contract management
  • +
+

Internal, Web Apps

+
    +
  • Retool - Build custom internal tools in minutes
  • +
+

Landing Pages

+
    +
  • Landen - Beautiful Landing Pages. Designed Instantly
  • +
  • Launchaco - Simple landing pages for your startup
  • +
  • Leadpages - Landing page builder & lead gen software
  • +
  • Instapage - Leanding pages, up to 6x more conversions
  • +
  • Unbounce - Landing Pages - More Powerful Customization
  • +
  • Leeflets - Functional landing pages for all kind of things
  • +
  • RIVYT - Websites for Video Creators
  • +
+

Landing Pages, Websites

+
    +
  • Carrd - Build simple, fully responsive one-page sites
  • +
+

Marketing

+
    +
  • Outgrow - Boost your marketing with highly interactive content
  • +
  • Rewardful - Instant Affiliate & Referral Programs for Stripe
  • +
  • Fortvision - Create interactive experiences that lead to higher conversions
  • +
+

Marketplace

+
    +
  • Sharetribe - Create your first marketplace without code
  • +
+

Membership, Websites

+
    +
  • Memberstack - Memberships & gated content for websites
  • +
+

Mobile Apps

+
    +
  • Dropsource - Build and publish native mobile app without coding
  • +
  • Glide - Create mobile apps from Google Sheets
  • +
  • Lightwell - A simple tool for creating native iOS apps on Mac.
  • +
  • Adalo - Create apps as easy as making a slide deck
  • +
  • App Inventor - Create powerful Android apps without code using blocs coding
  • +
  • Thunkable - Create beautiful and powerful mobile apps without code
  • +
+

Mobile Apps, Video Games

+ +

Payment

+
    +
  • Stripe - Payment integration and management
  • +
  • Paypal - Send Money, Online or Set up a Merchant Store
  • +
  • Buy me a coffee - Easy way to support a projet
  • +
+

Payment, Ecommerce

+
    +
  • Gumroad - Sell anything directly to anyone
  • +
+

Payment, Membership

+
    +
  • Patreon - Easy way to contribute to a project
  • +
+

Podcast

+
    +
  • Anchor - The best way to create your podcast
  • +
+

Scrapers

+ +

Video

+
    +
  • Loom - Seamless screen, mic, and camera recording for Chrome
  • +
+

Voice

+
    +
  • Voiceflow - Build voice apps in your browser without coding
  • +
  • Vuix - Design voice apps in minutes
  • +
  • ApitoBot - Create an Alexa Skill or Google Action in minutes
  • +
+

VR

+
    +
  • Instavr - Make your VR apps in minutes
  • +
+

Web Apps

+
    +
  • Bubble - Build a fully functional web app without any code.
  • +
  • Corvid - Build advanced web applications, hassle-free
  • +
  • Boundless - Create dynamic, multisided web apps without coding
  • +
+

Websites

+
    +
  • Sheet2site - Turn your Google Sheets into a website
  • +
  • Universe - Make an awesome website from your phone
  • +
  • Table2Site - Generate websites from your Airtable base
  • +
  • Squarespace - All-in-one platform to build a beautiful online e-commerce
  • +
  • Wix - Free website builder
  • +
  • IM Creator - Free website builder
  • +
  • Weebly - Build a free website or online store
  • +
  • Webnode - Easy & Free website maker
  • +
  • Jimdo - Your website builder
  • +
  • Bookmark - Create a Website with AI
  • +
  • Strikingly - Make a website in minutes
  • +
  • Tilda - Create beautiful websites without any code
  • +
+

Websites, Membership

+
    +
  • Memberspace - Turn your audience into paying members.
  • +
+ +

Awesome-no-code-tools

+

This awesome list links relevant tools for required to make apps/sites/chatbot and any digital tools without code!

+

I know that some of you are thinking "What is awesome without code? on Github???" But you never know when having such a tool might become handy.

+

This list is based on the incredible work done by Louis Veyret & Clément Barberousse and published as a google sheet. I am saving it here as a safekeeping and to maintain it. +Originally published as

+
+

Outils pour créer des sites web, applications mobiles, chatbot sans coder. +Par Louis Veyret & Clément Barberousse +Source : https://docs.google.com/spreadsheets/d/1QRhocTMg1cZAZyWz5vznqg6KdZrzU-b557Il8p0Q7HM/edit#gid=1754454108

+
+

Awesome list

+

Analytics

+ +

Automation

+
    +
  • Zapier - Connect and automate 500+ web apps
  • +
  • Integromat - The glue of the internet
  • +
  • IFTTT - Do more with the services you love
  • +
  • ActionDesk - Build powerful automations with your spreadsheet skills
  • +
  • Microsoft Flow - Automate tasks by integrating your favorite apps
  • +
  • Wayscript - A rapid scripting platform with drag-n-drop interface for Python and Javascript
  • +
  • Tray - Advanced integration platform for connecting up the tools you use every day
  • +
  • Automate Io - Put your business on autopilot. Connect 100+ business apps.
  • +
  • Blockspring - Supercharge your list building, reporting, and landing pages.
  • +
  • Oplim - Custom tasks on your website with zero code
  • +
  • Diagram - Nocode backend API builder with MongoDB and Firestore
  • +
  • Outfunnel - Keep customer data in sync across sales and marketing tools
  • +
+

Automation, Scrapers

+ +

Business Apps

+
    +
  • Betty Blocks - No-code enterprise application development
  • +
  • AppSheet - Intelligent no-code app development platform
  • +
  • Quick Base - Best way to manage data and automate processes, so you can accomplish more
  • +
  • Zoho Creator - Custom apps to run your business.
  • +
  • Calcapp - Build apps with your spreadsheet skills
  • +
+

Chatbots

+
    +
  • Manychat - Create a Messenger bot in minutes
  • +
  • It's Alive - Create a Facebook bot in minutes
  • +
  • Chatfuel - Create chatbots for your audience
  • +
  • Landbot - Lead generation landing page as chatbot
  • +
  • Botsify - Create your own automated chatbot online
  • +
  • Chatamo - Create intelligent voice and chatbot for marketing and sales
  • +
  • Flow XO - Create a chatbot with zero coding skills required
  • +
  • Smooch - Instantly deploy yout bots wherever users are
  • +
  • Rulai - AI Chatbot to deliver Scalable Self Service
  • +
+

Collaboration

+
    +
  • Notion - All-in-one workspace - notes, tasks, wikis & databases
  • +
  • Trello - All-in-one workspace and collaboration for businesses
  • +
+

Collaboration, Internal

+
    +
  • Quip - One place for all your team's work
  • +
+

CRM

+
    +
  • Salesflare - Simple & powerful CRM for small businesses
  • +
  • Pipedrive - CRM Gestion de leads en pipeline
  • +
+

CRM, Marketing

+
    +
  • Hubspot - A full platform of marketing, sales, customer service and CRM software
  • +
+

Customer Support

+
    +
  • Drift - Customer support chatbot
  • +
  • Crisp - Customer support directly in your website
  • +
+

Customer Support, Marketing, CRM

+
    +
  • Intercom - All-in-one customer support
  • +
+

Data, Marketing

+
    +
  • Hotjar - See how your visitors are really using your site
  • +
+

Database

+
    +
  • Airtable - Realtime spreadsheet database hybrid
  • +
  • NocoDB - Free & Open Source Airtable alternative - turns any SQL database into smart spreadsheet
  • +
  • Trevor - Query your live data, without code
  • +
+

Design

+
    +
  • Figma - The first interface design tool with real-time collaboration
  • +
  • unDraw - Free, open-source illustrations for everyone
  • +
+

Design, Websites

+
    +
  • Webflow - All-in-one web design platform
  • +
+

Ecommerce

+
    +
  • Shopify - Build your ecommerce store
  • +
  • Podia - Easily sell memberships, online courses and digital products
  • +
  • Monto - Product reviews for Webflow
  • +
  • Hingeto - Start your own Amazon-style marketplace
  • +
  • Volusion - Ecommerce website store & shopping cart software
  • +
+

Email

+
    +
  • Revue - Editorial newsletters tool for writers and publishers
  • +
  • Sendgrid - Email delivery service
  • +
  • Postcards - Create awesome emails with drag & drop simplicity
  • +
  • BEE - Create beautiful emails, fast.
  • +
  • Stripo - Free email template builder
  • +
  • Substack - Paid newsletters made simple
  • +
  • Mailchimp - Free emailing software
  • +
  • Converkit - Send automated emailing campaigns
  • +
+

Forms

+
    +
  • Typeform - Build beautiful conversational forms
  • +
  • Google Forms - Free forms from Google that connect directly to Google Sheets
  • +
  • Jotform - Online form builder & form creator
  • +
  • Paperform - Beautiful forms that feel like yours
  • +
+

Internal

+
    +
  • Coda - Build docs as powerful as apps
  • +
  • Nuclino - Knowledge base and collaboration
  • +
  • Contractbook - Efficient contract management
  • +
+

Internal, Web Apps

+
    +
  • Retool - Build custom internal tools in minutes
  • +
+

Landing Pages

+
    +
  • Landen - Beautiful Landing Pages. Designed Instantly
  • +
  • Launchaco - Simple landing pages for your startup
  • +
  • Leadpages - Landing page builder & lead gen software
  • +
  • Instapage - Leanding pages, up to 6x more conversions
  • +
  • Unbounce - Landing Pages - More Powerful Customization
  • +
  • Leeflets - Functional landing pages for all kind of things
  • +
  • RIVYT - Websites for Video Creators
  • +
+

Landing Pages, Websites

+
    +
  • Carrd - Build simple, fully responsive one-page sites
  • +
+

Marketing

+
    +
  • Outgrow - Boost your marketing with highly interactive content
  • +
  • Rewardful - Instant Affiliate & Referral Programs for Stripe
  • +
  • Fortvision - Create interactive experiences that lead to higher conversions
  • +
+

Marketplace

+
    +
  • Sharetribe - Create your first marketplace without code
  • +
+

Membership, Websites

+
    +
  • Memberstack - Memberships & gated content for websites
  • +
+

Mobile Apps

+
    +
  • Dropsource - Build and publish native mobile app without coding
  • +
  • Glide - Create mobile apps from Google Sheets
  • +
  • Lightwell - A simple tool for creating native iOS apps on Mac.
  • +
  • Adalo - Create apps as easy as making a slide deck
  • +
  • App Inventor - Create powerful Android apps without code using blocs coding
  • +
  • Thunkable - Create beautiful and powerful mobile apps without code
  • +
+

Mobile Apps, Video Games

+ +

Payment

+
    +
  • Stripe - Payment integration and management
  • +
  • Paypal - Send Money, Online or Set up a Merchant Store
  • +
  • Buy me a coffee - Easy way to support a projet
  • +
+

Payment, Ecommerce

+
    +
  • Gumroad - Sell anything directly to anyone
  • +
+

Payment, Membership

+
    +
  • Patreon - Easy way to contribute to a project
  • +
+

Podcast

+
    +
  • Anchor - The best way to create your podcast
  • +
+

Scrapers

+ +

Video

+
    +
  • Loom - Seamless screen, mic, and camera recording for Chrome
  • +
+

Voice

+
    +
  • Voiceflow - Build voice apps in your browser without coding
  • +
  • Vuix - Design voice apps in minutes
  • +
  • ApitoBot - Create an Alexa Skill or Google Action in minutes
  • +
+

VR

+
    +
  • Instavr - Make your VR apps in minutes
  • +
+

Web Apps

+
    +
  • Bubble - Build a fully functional web app without any code.
  • +
  • Corvid - Build advanced web applications, hassle-free
  • +
  • Boundless - Create dynamic, multisided web apps without coding
  • +
+

Websites

+
    +
  • Sheet2site - Turn your Google Sheets into a website
  • +
  • Universe - Make an awesome website from your phone
  • +
  • Table2Site - Generate websites from your Airtable base
  • +
  • Squarespace - All-in-one platform to build a beautiful online e-commerce
  • +
  • Wix - Free website builder
  • +
  • IM Creator - Free website builder
  • +
  • Weebly - Build a free website or online store
  • +
  • Webnode - Easy & Free website maker
  • +
  • Jimdo - Your website builder
  • +
  • Bookmark - Create a Website with AI
  • +
  • Strikingly - Make a website in minutes
  • +
  • Tilda - Create beautiful websites without any code
  • +
+

Websites, Membership

+
    +
  • Memberspace - Turn your audience into paying members.
  • +
+ +

Awesome-no-code-tools

+

This awesome list links relevant tools for required to make apps/sites/chatbot and any digital tools without code!

+

I know that some of you are thinking "What is awesome without code? on Github???" But you never know when having such a tool might become handy.

+

This list is based on the incredible work done by Louis Veyret & Clément Barberousse and published as a google sheet. I am saving it here as a safekeeping and to maintain it. +Originally published as

+
+

Outils pour créer des sites web, applications mobiles, chatbot sans coder. +Par Louis Veyret & Clément Barberousse +Source : https://docs.google.com/spreadsheets/d/1QRhocTMg1cZAZyWz5vznqg6KdZrzU-b557Il8p0Q7HM/edit#gid=1754454108

+
+

Awesome list

+

Analytics

+ +

Automation

+
    +
  • Zapier - Connect and automate 500+ web apps
  • +
  • Integromat - The glue of the internet
  • +
  • IFTTT - Do more with the services you love
  • +
  • ActionDesk - Build powerful automations with your spreadsheet skills
  • +
  • Microsoft Flow - Automate tasks by integrating your favorite apps
  • +
  • Wayscript - A rapid scripting platform with drag-n-drop interface for Python and Javascript
  • +
  • Tray - Advanced integration platform for connecting up the tools you use every day
  • +
  • Automate Io - Put your business on autopilot. Connect 100+ business apps.
  • +
  • Blockspring - Supercharge your list building, reporting, and landing pages.
  • +
  • Oplim - Custom tasks on your website with zero code
  • +
  • Diagram - Nocode backend API builder with MongoDB and Firestore
  • +
  • Outfunnel - Keep customer data in sync across sales and marketing tools
  • +
+

Automation, Scrapers

+ +

Business Apps

+
    +
  • Betty Blocks - No-code enterprise application development
  • +
  • AppSheet - Intelligent no-code app development platform
  • +
  • Quick Base - Best way to manage data and automate processes, so you can accomplish more
  • +
  • Zoho Creator - Custom apps to run your business.
  • +
  • Calcapp - Build apps with your spreadsheet skills
  • +
+

Chatbots

+
    +
  • Manychat - Create a Messenger bot in minutes
  • +
  • It's Alive - Create a Facebook bot in minutes
  • +
  • Chatfuel - Create chatbots for your audience
  • +
  • Landbot - Lead generation landing page as chatbot
  • +
  • Botsify - Create your own automated chatbot online
  • +
  • Chatamo - Create intelligent voice and chatbot for marketing and sales
  • +
  • Flow XO - Create a chatbot with zero coding skills required
  • +
  • Smooch - Instantly deploy yout bots wherever users are
  • +
  • Rulai - AI Chatbot to deliver Scalable Self Service
  • +
+

Collaboration

+
    +
  • Notion - All-in-one workspace - notes, tasks, wikis & databases
  • +
  • Trello - All-in-one workspace and collaboration for businesses
  • +
+

Collaboration, Internal

+
    +
  • Quip - One place for all your team's work
  • +
+

CRM

+
    +
  • Salesflare - Simple & powerful CRM for small businesses
  • +
  • Pipedrive - CRM Gestion de leads en pipeline
  • +
+

CRM, Marketing

+
    +
  • Hubspot - A full platform of marketing, sales, customer service and CRM software
  • +
+

Customer Support

+
    +
  • Drift - Customer support chatbot
  • +
  • Crisp - Customer support directly in your website
  • +
+

Customer Support, Marketing, CRM

+
    +
  • Intercom - All-in-one customer support
  • +
+

Data, Marketing

+
    +
  • Hotjar - See how your visitors are really using your site
  • +
+

Database

+
    +
  • Airtable - Realtime spreadsheet database hybrid
  • +
  • NocoDB - Free & Open Source Airtable alternative - turns any SQL database into smart spreadsheet
  • +
  • Trevor - Query your live data, without code
  • +
+

Design

+
    +
  • Figma - The first interface design tool with real-time collaboration
  • +
  • unDraw - Free, open-source illustrations for everyone
  • +
+

Design, Websites

+
    +
  • Webflow - All-in-one web design platform
  • +
+

Ecommerce

+
    +
  • Shopify - Build your ecommerce store
  • +
  • Podia - Easily sell memberships, online courses and digital products
  • +
  • Monto - Product reviews for Webflow
  • +
  • Hingeto - Start your own Amazon-style marketplace
  • +
  • Volusion - Ecommerce website store & shopping cart software
  • +
+

Email

+
    +
  • Revue - Editorial newsletters tool for writers and publishers
  • +
  • Sendgrid - Email delivery service
  • +
  • Postcards - Create awesome emails with drag & drop simplicity
  • +
  • BEE - Create beautiful emails, fast.
  • +
  • Stripo - Free email template builder
  • +
  • Substack - Paid newsletters made simple
  • +
  • Mailchimp - Free emailing software
  • +
  • Converkit - Send automated emailing campaigns
  • +
+

Forms

+
    +
  • Typeform - Build beautiful conversational forms
  • +
  • Google Forms - Free forms from Google that connect directly to Google Sheets
  • +
  • Jotform - Online form builder & form creator
  • +
  • Paperform - Beautiful forms that feel like yours
  • +
+

Internal

+
    +
  • Coda - Build docs as powerful as apps
  • +
  • Nuclino - Knowledge base and collaboration
  • +
  • Contractbook - Efficient contract management
  • +
+

Internal, Web Apps

+
    +
  • Retool - Build custom internal tools in minutes
  • +
+

Landing Pages

+
    +
  • Landen - Beautiful Landing Pages. Designed Instantly
  • +
  • Launchaco - Simple landing pages for your startup
  • +
  • Leadpages - Landing page builder & lead gen software
  • +
  • Instapage - Leanding pages, up to 6x more conversions
  • +
  • Unbounce - Landing Pages - More Powerful Customization
  • +
  • Leeflets - Functional landing pages for all kind of things
  • +
  • RIVYT - Websites for Video Creators
  • +
+

Landing Pages, Websites

+
    +
  • Carrd - Build simple, fully responsive one-page sites
  • +
+

Marketing

+
    +
  • Outgrow - Boost your marketing with highly interactive content
  • +
  • Rewardful - Instant Affiliate & Referral Programs for Stripe
  • +
  • Fortvision - Create interactive experiences that lead to higher conversions
  • +
+

Marketplace

+
    +
  • Sharetribe - Create your first marketplace without code
  • +
+

Membership, Websites

+
    +
  • Memberstack - Memberships & gated content for websites
  • +
+

Mobile Apps

+
    +
  • Dropsource - Build and publish native mobile app without coding
  • +
  • Glide - Create mobile apps from Google Sheets
  • +
  • Lightwell - A simple tool for creating native iOS apps on Mac.
  • +
  • Adalo - Create apps as easy as making a slide deck
  • +
  • App Inventor - Create powerful Android apps without code using blocs coding
  • +
  • Thunkable - Create beautiful and powerful mobile apps without code
  • +
+

Mobile Apps, Video Games

+ +

Payment

+
    +
  • Stripe - Payment integration and management
  • +
  • Paypal - Send Money, Online or Set up a Merchant Store
  • +
  • Buy me a coffee - Easy way to support a projet
  • +
+

Payment, Ecommerce

+
    +
  • Gumroad - Sell anything directly to anyone
  • +
+

Payment, Membership

+
    +
  • Patreon - Easy way to contribute to a project
  • +
+

Podcast

+
    +
  • Anchor - The best way to create your podcast
  • +
+

Scrapers

+ +

Video

+
    +
  • Loom - Seamless screen, mic, and camera recording for Chrome
  • +
+

Voice

+
    +
  • Voiceflow - Build voice apps in your browser without coding
  • +
  • Vuix - Design voice apps in minutes
  • +
  • ApitoBot - Create an Alexa Skill or Google Action in minutes
  • +
+

VR

+
    +
  • Instavr - Make your VR apps in minutes
  • +
+

Web Apps

+
    +
  • Bubble - Build a fully functional web app without any code.
  • +
  • Corvid - Build advanced web applications, hassle-free
  • +
  • Boundless - Create dynamic, multisided web apps without coding
  • +
+

Websites

+
    +
  • Sheet2site - Turn your Google Sheets into a website
  • +
  • Universe - Make an awesome website from your phone
  • +
  • Table2Site - Generate websites from your Airtable base
  • +
  • Squarespace - All-in-one platform to build a beautiful online e-commerce
  • +
  • Wix - Free website builder
  • +
  • IM Creator - Free website builder
  • +
  • Weebly - Build a free website or online store
  • +
  • Webnode - Easy & Free website maker
  • +
  • Jimdo - Your website builder
  • +
  • Bookmark - Create a Website with AI
  • +
  • Strikingly - Make a website in minutes
  • +
  • Tilda - Create beautiful websites without any code
  • +
+

Websites, Membership

+
    +
  • Memberspace - Turn your audience into paying members.
  • +
+ +

Awesome-no-code-tools

+

This awesome list links relevant tools for required to make apps/sites/chatbot and any digital tools without code!

+

I know that some of you are thinking "What is awesome without code? on Github???" But you never know when having such a tool might become handy.

+

This list is based on the incredible work done by Louis Veyret & Clément Barberousse and published as a google sheet. I am saving it here as a safekeeping and to maintain it. +Originally published as

+
+

Outils pour créer des sites web, applications mobiles, chatbot sans coder. +Par Louis Veyret & Clément Barberousse +Source : https://docs.google.com/spreadsheets/d/1QRhocTMg1cZAZyWz5vznqg6KdZrzU-b557Il8p0Q7HM/edit#gid=1754454108

+
+

Awesome list

+

Analytics

+ +

Automation

+
    +
  • Zapier - Connect and automate 500+ web apps
  • +
  • Integromat - The glue of the internet
  • +
  • IFTTT - Do more with the services you love
  • +
  • ActionDesk - Build powerful automations with your spreadsheet skills
  • +
  • Microsoft Flow - Automate tasks by integrating your favorite apps
  • +
  • Wayscript - A rapid scripting platform with drag-n-drop interface for Python and Javascript
  • +
  • Tray - Advanced integration platform for connecting up the tools you use every day
  • +
  • Automate Io - Put your business on autopilot. Connect 100+ business apps.
  • +
  • Blockspring - Supercharge your list building, reporting, and landing pages.
  • +
  • Oplim - Custom tasks on your website with zero code
  • +
  • Diagram - Nocode backend API builder with MongoDB and Firestore
  • +
  • Outfunnel - Keep customer data in sync across sales and marketing tools
  • +
+

Automation, Scrapers

+ +

Business Apps

+
    +
  • Betty Blocks - No-code enterprise application development
  • +
  • AppSheet - Intelligent no-code app development platform
  • +
  • Quick Base - Best way to manage data and automate processes, so you can accomplish more
  • +
  • Zoho Creator - Custom apps to run your business.
  • +
  • Calcapp - Build apps with your spreadsheet skills
  • +
+

Chatbots

+
    +
  • Manychat - Create a Messenger bot in minutes
  • +
  • It's Alive - Create a Facebook bot in minutes
  • +
  • Chatfuel - Create chatbots for your audience
  • +
  • Landbot - Lead generation landing page as chatbot
  • +
  • Botsify - Create your own automated chatbot online
  • +
  • Chatamo - Create intelligent voice and chatbot for marketing and sales
  • +
  • Flow XO - Create a chatbot with zero coding skills required
  • +
  • Smooch - Instantly deploy yout bots wherever users are
  • +
  • Rulai - AI Chatbot to deliver Scalable Self Service
  • +
+

Collaboration

+
    +
  • Notion - All-in-one workspace - notes, tasks, wikis & databases
  • +
  • Trello - All-in-one workspace and collaboration for businesses
  • +
+

Collaboration, Internal

+
    +
  • Quip - One place for all your team's work
  • +
+

CRM

+
    +
  • Salesflare - Simple & powerful CRM for small businesses
  • +
  • Pipedrive - CRM Gestion de leads en pipeline
  • +
+

CRM, Marketing

+
    +
  • Hubspot - A full platform of marketing, sales, customer service and CRM software
  • +
+

Customer Support

+
    +
  • Drift - Customer support chatbot
  • +
  • Crisp - Customer support directly in your website
  • +
+

Customer Support, Marketing, CRM

+
    +
  • Intercom - All-in-one customer support
  • +
+

Data, Marketing

+
    +
  • Hotjar - See how your visitors are really using your site
  • +
+

Database

+
    +
  • Airtable - Realtime spreadsheet database hybrid
  • +
  • NocoDB - Free & Open Source Airtable alternative - turns any SQL database into smart spreadsheet
  • +
  • Trevor - Query your live data, without code
  • +
+

Design

+
    +
  • Figma - The first interface design tool with real-time collaboration
  • +
  • unDraw - Free, open-source illustrations for everyone
  • +
+

Design, Websites

+
    +
  • Webflow - All-in-one web design platform
  • +
+

Ecommerce

+
    +
  • Shopify - Build your ecommerce store
  • +
  • Podia - Easily sell memberships, online courses and digital products
  • +
  • Monto - Product reviews for Webflow
  • +
  • Hingeto - Start your own Amazon-style marketplace
  • +
  • Volusion - Ecommerce website store & shopping cart software
  • +
+

Email

+
    +
  • Revue - Editorial newsletters tool for writers and publishers
  • +
  • Sendgrid - Email delivery service
  • +
  • Postcards - Create awesome emails with drag & drop simplicity
  • +
  • BEE - Create beautiful emails, fast.
  • +
  • Stripo - Free email template builder
  • +
  • Substack - Paid newsletters made simple
  • +
  • Mailchimp - Free emailing software
  • +
  • Converkit - Send automated emailing campaigns
  • +
+

Forms

+
    +
  • Typeform - Build beautiful conversational forms
  • +
  • Google Forms - Free forms from Google that connect directly to Google Sheets
  • +
  • Jotform - Online form builder & form creator
  • +
  • Paperform - Beautiful forms that feel like yours
  • +
+

Internal

+
    +
  • Coda - Build docs as powerful as apps
  • +
  • Nuclino - Knowledge base and collaboration
  • +
  • Contractbook - Efficient contract management
  • +
+

Internal, Web Apps

+
    +
  • Retool - Build custom internal tools in minutes
  • +
+

Landing Pages

+
    +
  • Landen - Beautiful Landing Pages. Designed Instantly
  • +
  • Launchaco - Simple landing pages for your startup
  • +
  • Leadpages - Landing page builder & lead gen software
  • +
  • Instapage - Leanding pages, up to 6x more conversions
  • +
  • Unbounce - Landing Pages - More Powerful Customization
  • +
  • Leeflets - Functional landing pages for all kind of things
  • +
  • RIVYT - Websites for Video Creators
  • +
+

Landing Pages, Websites

+
    +
  • Carrd - Build simple, fully responsive one-page sites
  • +
+

Marketing

+
    +
  • Outgrow - Boost your marketing with highly interactive content
  • +
  • Rewardful - Instant Affiliate & Referral Programs for Stripe
  • +
  • Fortvision - Create interactive experiences that lead to higher conversions
  • +
+

Marketplace

+
    +
  • Sharetribe - Create your first marketplace without code
  • +
+

Membership, Websites

+
    +
  • Memberstack - Memberships & gated content for websites
  • +
+

Mobile Apps

+
    +
  • Dropsource - Build and publish native mobile app without coding
  • +
  • Glide - Create mobile apps from Google Sheets
  • +
  • Lightwell - A simple tool for creating native iOS apps on Mac.
  • +
  • Adalo - Create apps as easy as making a slide deck
  • +
  • App Inventor - Create powerful Android apps without code using blocs coding
  • +
  • Thunkable - Create beautiful and powerful mobile apps without code
  • +
+

Mobile Apps, Video Games

+ +

Payment

+
    +
  • Stripe - Payment integration and management
  • +
  • Paypal - Send Money, Online or Set up a Merchant Store
  • +
  • Buy me a coffee - Easy way to support a projet
  • +
+

Payment, Ecommerce

+
    +
  • Gumroad - Sell anything directly to anyone
  • +
+

Payment, Membership

+
    +
  • Patreon - Easy way to contribute to a project
  • +
+

Podcast

+
    +
  • Anchor - The best way to create your podcast
  • +
+

Scrapers

+ +

Video

+
    +
  • Loom - Seamless screen, mic, and camera recording for Chrome
  • +
+

Voice

+
    +
  • Voiceflow - Build voice apps in your browser without coding
  • +
  • Vuix - Design voice apps in minutes
  • +
  • ApitoBot - Create an Alexa Skill or Google Action in minutes
  • +
+

VR

+
    +
  • Instavr - Make your VR apps in minutes
  • +
+

Web Apps

+
    +
  • Bubble - Build a fully functional web app without any code.
  • +
  • Corvid - Build advanced web applications, hassle-free
  • +
  • Boundless - Create dynamic, multisided web apps without coding
  • +
+

Websites

+
    +
  • Sheet2site - Turn your Google Sheets into a website
  • +
  • Universe - Make an awesome website from your phone
  • +
  • Table2Site - Generate websites from your Airtable base
  • +
  • Squarespace - All-in-one platform to build a beautiful online e-commerce
  • +
  • Wix - Free website builder
  • +
  • IM Creator - Free website builder
  • +
  • Weebly - Build a free website or online store
  • +
  • Webnode - Easy & Free website maker
  • +
  • Jimdo - Your website builder
  • +
  • Bookmark - Create a Website with AI
  • +
  • Strikingly - Make a website in minutes
  • +
  • Tilda - Create beautiful websites without any code
  • +
+

Websites, Membership

+
    +
  • Memberspace - Turn your audience into paying members.
  • +
+ +

Awesome-no-code-tools

+

This awesome list links relevant tools for required to make apps/sites/chatbot and any digital tools without code!

+

I know that some of you are thinking "What is awesome without code? on Github???" But you never know when having such a tool might become handy.

+

This list is based on the incredible work done by Louis Veyret & Clément Barberousse and published as a google sheet. I am saving it here as a safekeeping and to maintain it. +Originally published as

+
+

Outils pour créer des sites web, applications mobiles, chatbot sans coder. +Par Louis Veyret & Clément Barberousse +Source : https://docs.google.com/spreadsheets/d/1QRhocTMg1cZAZyWz5vznqg6KdZrzU-b557Il8p0Q7HM/edit#gid=1754454108

+
+

Awesome list

+

Analytics

+ +

Automation

+
    +
  • Zapier - Connect and automate 500+ web apps
  • +
  • Integromat - The glue of the internet
  • +
  • IFTTT - Do more with the services you love
  • +
  • ActionDesk - Build powerful automations with your spreadsheet skills
  • +
  • Microsoft Flow - Automate tasks by integrating your favorite apps
  • +
  • Wayscript - A rapid scripting platform with drag-n-drop interface for Python and Javascript
  • +
  • Tray - Advanced integration platform for connecting up the tools you use every day
  • +
  • Automate Io - Put your business on autopilot. Connect 100+ business apps.
  • +
  • Blockspring - Supercharge your list building, reporting, and landing pages.
  • +
  • Oplim - Custom tasks on your website with zero code
  • +
  • Diagram - Nocode backend API builder with MongoDB and Firestore
  • +
  • Outfunnel - Keep customer data in sync across sales and marketing tools
  • +
+

Automation, Scrapers

+ +

Business Apps

+
    +
  • Betty Blocks - No-code enterprise application development
  • +
  • AppSheet - Intelligent no-code app development platform
  • +
  • Quick Base - Best way to manage data and automate processes, so you can accomplish more
  • +
  • Zoho Creator - Custom apps to run your business.
  • +
  • Calcapp - Build apps with your spreadsheet skills
  • +
+

Chatbots

+
    +
  • Manychat - Create a Messenger bot in minutes
  • +
  • It's Alive - Create a Facebook bot in minutes
  • +
  • Chatfuel - Create chatbots for your audience
  • +
  • Landbot - Lead generation landing page as chatbot
  • +
  • Botsify - Create your own automated chatbot online
  • +
  • Chatamo - Create intelligent voice and chatbot for marketing and sales
  • +
  • Flow XO - Create a chatbot with zero coding skills required
  • +
  • Smooch - Instantly deploy yout bots wherever users are
  • +
  • Rulai - AI Chatbot to deliver Scalable Self Service
  • +
+

Collaboration

+
    +
  • Notion - All-in-one workspace - notes, tasks, wikis & databases
  • +
  • Trello - All-in-one workspace and collaboration for businesses
  • +
+

Collaboration, Internal

+
    +
  • Quip - One place for all your team's work
  • +
+

CRM

+
    +
  • Salesflare - Simple & powerful CRM for small businesses
  • +
  • Pipedrive - CRM Gestion de leads en pipeline
  • +
+

CRM, Marketing

+
    +
  • Hubspot - A full platform of marketing, sales, customer service and CRM software
  • +
+

Customer Support

+
    +
  • Drift - Customer support chatbot
  • +
  • Crisp - Customer support directly in your website
  • +
+

Customer Support, Marketing, CRM

+
    +
  • Intercom - All-in-one customer support
  • +
+

Data, Marketing

+
    +
  • Hotjar - See how your visitors are really using your site
  • +
+

Database

+
    +
  • Airtable - Realtime spreadsheet database hybrid
  • +
  • NocoDB - Free & Open Source Airtable alternative - turns any SQL database into smart spreadsheet
  • +
  • Trevor - Query your live data, without code
  • +
+

Design

+
    +
  • Figma - The first interface design tool with real-time collaboration
  • +
  • unDraw - Free, open-source illustrations for everyone
  • +
+

Design, Websites

+
    +
  • Webflow - All-in-one web design platform
  • +
+

Ecommerce

+
    +
  • Shopify - Build your ecommerce store
  • +
  • Podia - Easily sell memberships, online courses and digital products
  • +
  • Monto - Product reviews for Webflow
  • +
  • Hingeto - Start your own Amazon-style marketplace
  • +
  • Volusion - Ecommerce website store & shopping cart software
  • +
+

Email

+
    +
  • Revue - Editorial newsletters tool for writers and publishers
  • +
  • Sendgrid - Email delivery service
  • +
  • Postcards - Create awesome emails with drag & drop simplicity
  • +
  • BEE - Create beautiful emails, fast.
  • +
  • Stripo - Free email template builder
  • +
  • Substack - Paid newsletters made simple
  • +
  • Mailchimp - Free emailing software
  • +
  • Converkit - Send automated emailing campaigns
  • +
+

Forms

+
    +
  • Typeform - Build beautiful conversational forms
  • +
  • Google Forms - Free forms from Google that connect directly to Google Sheets
  • +
  • Jotform - Online form builder & form creator
  • +
  • Paperform - Beautiful forms that feel like yours
  • +
+

Internal

+
    +
  • Coda - Build docs as powerful as apps
  • +
  • Nuclino - Knowledge base and collaboration
  • +
  • Contractbook - Efficient contract management
  • +
+

Internal, Web Apps

+
    +
  • Retool - Build custom internal tools in minutes
  • +
+

Landing Pages

+
    +
  • Landen - Beautiful Landing Pages. Designed Instantly
  • +
  • Launchaco - Simple landing pages for your startup
  • +
  • Leadpages - Landing page builder & lead gen software
  • +
  • Instapage - Leanding pages, up to 6x more conversions
  • +
  • Unbounce - Landing Pages - More Powerful Customization
  • +
  • Leeflets - Functional landing pages for all kind of things
  • +
  • RIVYT - Websites for Video Creators
  • +
+

Landing Pages, Websites

+
    +
  • Carrd - Build simple, fully responsive one-page sites
  • +
+

Marketing

+
    +
  • Outgrow - Boost your marketing with highly interactive content
  • +
  • Rewardful - Instant Affiliate & Referral Programs for Stripe
  • +
  • Fortvision - Create interactive experiences that lead to higher conversions
  • +
+

Marketplace

+
    +
  • Sharetribe - Create your first marketplace without code
  • +
+

Membership, Websites

+
    +
  • Memberstack - Memberships & gated content for websites
  • +
+

Mobile Apps

+
    +
  • Dropsource - Build and publish native mobile app without coding
  • +
  • Glide - Create mobile apps from Google Sheets
  • +
  • Lightwell - A simple tool for creating native iOS apps on Mac.
  • +
  • Adalo - Create apps as easy as making a slide deck
  • +
  • App Inventor - Create powerful Android apps without code using blocs coding
  • +
  • Thunkable - Create beautiful and powerful mobile apps without code
  • +
+

Mobile Apps, Video Games

+ +

Payment

+
    +
  • Stripe - Payment integration and management
  • +
  • Paypal - Send Money, Online or Set up a Merchant Store
  • +
  • Buy me a coffee - Easy way to support a projet
  • +
+

Payment, Ecommerce

+
    +
  • Gumroad - Sell anything directly to anyone
  • +
+

Payment, Membership

+
    +
  • Patreon - Easy way to contribute to a project
  • +
+

Podcast

+
    +
  • Anchor - The best way to create your podcast
  • +
+

Scrapers

+ +

Video

+
    +
  • Loom - Seamless screen, mic, and camera recording for Chrome
  • +
+

Voice

+
    +
  • Voiceflow - Build voice apps in your browser without coding
  • +
  • Vuix - Design voice apps in minutes
  • +
  • ApitoBot - Create an Alexa Skill or Google Action in minutes
  • +
+

VR

+
    +
  • Instavr - Make your VR apps in minutes
  • +
+

Web Apps

+
    +
  • Bubble - Build a fully functional web app without any code.
  • +
  • Corvid - Build advanced web applications, hassle-free
  • +
  • Boundless - Create dynamic, multisided web apps without coding
  • +
+

Websites

+
    +
  • Sheet2site - Turn your Google Sheets into a website
  • +
  • Universe - Make an awesome website from your phone
  • +
  • Table2Site - Generate websites from your Airtable base
  • +
  • Squarespace - All-in-one platform to build a beautiful online e-commerce
  • +
  • Wix - Free website builder
  • +
  • IM Creator - Free website builder
  • +
  • Weebly - Build a free website or online store
  • +
  • Webnode - Easy & Free website maker
  • +
  • Jimdo - Your website builder
  • +
  • Bookmark - Create a Website with AI
  • +
  • Strikingly - Make a website in minutes
  • +
  • Tilda - Create beautiful websites without any code
  • +
+

Websites, Membership

+
    +
  • Memberspace - Turn your audience into paying members.
  • +
+ +

Awesome-no-code-tools

+

This awesome list links relevant tools for required to make apps/sites/chatbot and any digital tools without code!

+

I know that some of you are thinking "What is awesome without code? on Github???" But you never know when having such a tool might become handy.

+

This list is based on the incredible work done by Louis Veyret & Clément Barberousse and published as a google sheet. I am saving it here as a safekeeping and to maintain it. +Originally published as

+
+

Outils pour créer des sites web, applications mobiles, chatbot sans coder. +Par Louis Veyret & Clément Barberousse +Source : https://docs.google.com/spreadsheets/d/1QRhocTMg1cZAZyWz5vznqg6KdZrzU-b557Il8p0Q7HM/edit#gid=1754454108

+
+

Awesome list

+

Analytics

+ +

Automation

+
    +
  • Zapier - Connect and automate 500+ web apps
  • +
  • Integromat - The glue of the internet
  • +
  • IFTTT - Do more with the services you love
  • +
  • ActionDesk - Build powerful automations with your spreadsheet skills
  • +
  • Microsoft Flow - Automate tasks by integrating your favorite apps
  • +
  • Wayscript - A rapid scripting platform with drag-n-drop interface for Python and Javascript
  • +
  • Tray - Advanced integration platform for connecting up the tools you use every day
  • +
  • Automate Io - Put your business on autopilot. Connect 100+ business apps.
  • +
  • Blockspring - Supercharge your list building, reporting, and landing pages.
  • +
  • Oplim - Custom tasks on your website with zero code
  • +
  • Diagram - Nocode backend API builder with MongoDB and Firestore
  • +
  • Outfunnel - Keep customer data in sync across sales and marketing tools
  • +
+

Automation, Scrapers

+ +

Business Apps

+
    +
  • Betty Blocks - No-code enterprise application development
  • +
  • AppSheet - Intelligent no-code app development platform
  • +
  • Quick Base - Best way to manage data and automate processes, so you can accomplish more
  • +
  • Zoho Creator - Custom apps to run your business.
  • +
  • Calcapp - Build apps with your spreadsheet skills
  • +
+

Chatbots

+
    +
  • Manychat - Create a Messenger bot in minutes
  • +
  • It's Alive - Create a Facebook bot in minutes
  • +
  • Chatfuel - Create chatbots for your audience
  • +
  • Landbot - Lead generation landing page as chatbot
  • +
  • Botsify - Create your own automated chatbot online
  • +
  • Chatamo - Create intelligent voice and chatbot for marketing and sales
  • +
  • Flow XO - Create a chatbot with zero coding skills required
  • +
  • Smooch - Instantly deploy yout bots wherever users are
  • +
  • Rulai - AI Chatbot to deliver Scalable Self Service
  • +
+

Collaboration

+
    +
  • Notion - All-in-one workspace - notes, tasks, wikis & databases
  • +
  • Trello - All-in-one workspace and collaboration for businesses
  • +
+

Collaboration, Internal

+
    +
  • Quip - One place for all your team's work
  • +
+

CRM

+
    +
  • Salesflare - Simple & powerful CRM for small businesses
  • +
  • Pipedrive - CRM Gestion de leads en pipeline
  • +
+

CRM, Marketing

+
    +
  • Hubspot - A full platform of marketing, sales, customer service and CRM software
  • +
+

Customer Support

+
    +
  • Drift - Customer support chatbot
  • +
  • Crisp - Customer support directly in your website
  • +
+

Customer Support, Marketing, CRM

+
    +
  • Intercom - All-in-one customer support
  • +
+

Data, Marketing

+
    +
  • Hotjar - See how your visitors are really using your site
  • +
+

Database

+
    +
  • Airtable - Realtime spreadsheet database hybrid
  • +
  • NocoDB - Free & Open Source Airtable alternative - turns any SQL database into smart spreadsheet
  • +
  • Trevor - Query your live data, without code
  • +
+

Design

+
    +
  • Figma - The first interface design tool with real-time collaboration
  • +
  • unDraw - Free, open-source illustrations for everyone
  • +
+

Design, Websites

+
    +
  • Webflow - All-in-one web design platform
  • +
+

Ecommerce

+
    +
  • Shopify - Build your ecommerce store
  • +
  • Podia - Easily sell memberships, online courses and digital products
  • +
  • Monto - Product reviews for Webflow
  • +
  • Hingeto - Start your own Amazon-style marketplace
  • +
  • Volusion - Ecommerce website store & shopping cart software
  • +
+

Email

+
    +
  • Revue - Editorial newsletters tool for writers and publishers
  • +
  • Sendgrid - Email delivery service
  • +
  • Postcards - Create awesome emails with drag & drop simplicity
  • +
  • BEE - Create beautiful emails, fast.
  • +
  • Stripo - Free email template builder
  • +
  • Substack - Paid newsletters made simple
  • +
  • Mailchimp - Free emailing software
  • +
  • Converkit - Send automated emailing campaigns
  • +
+

Forms

+
    +
  • Typeform - Build beautiful conversational forms
  • +
  • Google Forms - Free forms from Google that connect directly to Google Sheets
  • +
  • Jotform - Online form builder & form creator
  • +
  • Paperform - Beautiful forms that feel like yours
  • +
+

Internal

+
    +
  • Coda - Build docs as powerful as apps
  • +
  • Nuclino - Knowledge base and collaboration
  • +
  • Contractbook - Efficient contract management
  • +
+

Internal, Web Apps

+
    +
  • Retool - Build custom internal tools in minutes
  • +
+

Landing Pages

+
    +
  • Landen - Beautiful Landing Pages. Designed Instantly
  • +
  • Launchaco - Simple landing pages for your startup
  • +
  • Leadpages - Landing page builder & lead gen software
  • +
  • Instapage - Leanding pages, up to 6x more conversions
  • +
  • Unbounce - Landing Pages - More Powerful Customization
  • +
  • Leeflets - Functional landing pages for all kind of things
  • +
  • RIVYT - Websites for Video Creators
  • +
+

Landing Pages, Websites

+
    +
  • Carrd - Build simple, fully responsive one-page sites
  • +
+

Marketing

+
    +
  • Outgrow - Boost your marketing with highly interactive content
  • +
  • Rewardful - Instant Affiliate & Referral Programs for Stripe
  • +
  • Fortvision - Create interactive experiences that lead to higher conversions
  • +
+

Marketplace

+
    +
  • Sharetribe - Create your first marketplace without code
  • +
+

Membership, Websites

+
    +
  • Memberstack - Memberships & gated content for websites
  • +
+

Mobile Apps

+
    +
  • Dropsource - Build and publish native mobile app without coding
  • +
  • Glide - Create mobile apps from Google Sheets
  • +
  • Lightwell - A simple tool for creating native iOS apps on Mac.
  • +
  • Adalo - Create apps as easy as making a slide deck
  • +
  • App Inventor - Create powerful Android apps without code using blocs coding
  • +
  • Thunkable - Create beautiful and powerful mobile apps without code
  • +
+

Mobile Apps, Video Games

+ +

Payment

+
    +
  • Stripe - Payment integration and management
  • +
  • Paypal - Send Money, Online or Set up a Merchant Store
  • +
  • Buy me a coffee - Easy way to support a projet
  • +
+

Payment, Ecommerce

+
    +
  • Gumroad - Sell anything directly to anyone
  • +
+

Payment, Membership

+
    +
  • Patreon - Easy way to contribute to a project
  • +
+

Podcast

+
    +
  • Anchor - The best way to create your podcast
  • +
+

Scrapers

+ +

Video

+
    +
  • Loom - Seamless screen, mic, and camera recording for Chrome
  • +
+

Voice

+
    +
  • Voiceflow - Build voice apps in your browser without coding
  • +
  • Vuix - Design voice apps in minutes
  • +
  • ApitoBot - Create an Alexa Skill or Google Action in minutes
  • +
+

VR

+
    +
  • Instavr - Make your VR apps in minutes
  • +
+

Web Apps

+
    +
  • Bubble - Build a fully functional web app without any code.
  • +
  • Corvid - Build advanced web applications, hassle-free
  • +
  • Boundless - Create dynamic, multisided web apps without coding
  • +
+

Websites

+
    +
  • Sheet2site - Turn your Google Sheets into a website
  • +
  • Universe - Make an awesome website from your phone
  • +
  • Table2Site - Generate websites from your Airtable base
  • +
  • Squarespace - All-in-one platform to build a beautiful online e-commerce
  • +
  • Wix - Free website builder
  • +
  • IM Creator - Free website builder
  • +
  • Weebly - Build a free website or online store
  • +
  • Webnode - Easy & Free website maker
  • +
  • Jimdo - Your website builder
  • +
  • Bookmark - Create a Website with AI
  • +
  • Strikingly - Make a website in minutes
  • +
  • Tilda - Create beautiful websites without any code
  • +
+

Websites, Membership

+
    +
  • Memberspace - Turn your audience into paying members.
  • +
+ +

Awesome-no-code-tools

+

This awesome list links relevant tools for required to make apps/sites/chatbot and any digital tools without code!

+

I know that some of you are thinking "What is awesome without code? on Github???" But you never know when having such a tool might become handy.

+

This list is based on the incredible work done by Louis Veyret & Clément Barberousse and published as a google sheet. I am saving it here as a safekeeping and to maintain it. +Originally published as

+
+

Outils pour créer des sites web, applications mobiles, chatbot sans coder. +Par Louis Veyret & Clément Barberousse +Source : https://docs.google.com/spreadsheets/d/1QRhocTMg1cZAZyWz5vznqg6KdZrzU-b557Il8p0Q7HM/edit#gid=1754454108

+
+

Awesome list

+

Analytics

+ +

Automation

+
    +
  • Zapier - Connect and automate 500+ web apps
  • +
  • Integromat - The glue of the internet
  • +
  • IFTTT - Do more with the services you love
  • +
  • ActionDesk - Build powerful automations with your spreadsheet skills
  • +
  • Microsoft Flow - Automate tasks by integrating your favorite apps
  • +
  • Wayscript - A rapid scripting platform with drag-n-drop interface for Python and Javascript
  • +
  • Tray - Advanced integration platform for connecting up the tools you use every day
  • +
  • Automate Io - Put your business on autopilot. Connect 100+ business apps.
  • +
  • Blockspring - Supercharge your list building, reporting, and landing pages.
  • +
  • Oplim - Custom tasks on your website with zero code
  • +
  • Diagram - Nocode backend API builder with MongoDB and Firestore
  • +
  • Outfunnel - Keep customer data in sync across sales and marketing tools
  • +
+

Automation, Scrapers

+ +

Business Apps

+
    +
  • Betty Blocks - No-code enterprise application development
  • +
  • AppSheet - Intelligent no-code app development platform
  • +
  • Quick Base - Best way to manage data and automate processes, so you can accomplish more
  • +
  • Zoho Creator - Custom apps to run your business.
  • +
  • Calcapp - Build apps with your spreadsheet skills
  • +
+

Chatbots

+
    +
  • Manychat - Create a Messenger bot in minutes
  • +
  • It's Alive - Create a Facebook bot in minutes
  • +
  • Chatfuel - Create chatbots for your audience
  • +
  • Landbot - Lead generation landing page as chatbot
  • +
  • Botsify - Create your own automated chatbot online
  • +
  • Chatamo - Create intelligent voice and chatbot for marketing and sales
  • +
  • Flow XO - Create a chatbot with zero coding skills required
  • +
  • Smooch - Instantly deploy yout bots wherever users are
  • +
  • Rulai - AI Chatbot to deliver Scalable Self Service
  • +
+

Collaboration

+
    +
  • Notion - All-in-one workspace - notes, tasks, wikis & databases
  • +
  • Trello - All-in-one workspace and collaboration for businesses
  • +
+

Collaboration, Internal

+
    +
  • Quip - One place for all your team's work
  • +
+

CRM

+
    +
  • Salesflare - Simple & powerful CRM for small businesses
  • +
  • Pipedrive - CRM Gestion de leads en pipeline
  • +
+

CRM, Marketing

+
    +
  • Hubspot - A full platform of marketing, sales, customer service and CRM software
  • +
+

Customer Support

+
    +
  • Drift - Customer support chatbot
  • +
  • Crisp - Customer support directly in your website
  • +
+

Customer Support, Marketing, CRM

+
    +
  • Intercom - All-in-one customer support
  • +
+

Data, Marketing

+
    +
  • Hotjar - See how your visitors are really using your site
  • +
+

Database

+
    +
  • Airtable - Realtime spreadsheet database hybrid
  • +
  • NocoDB - Free & Open Source Airtable alternative - turns any SQL database into smart spreadsheet
  • +
  • Trevor - Query your live data, without code
  • +
+

Design

+
    +
  • Figma - The first interface design tool with real-time collaboration
  • +
  • unDraw - Free, open-source illustrations for everyone
  • +
+

Design, Websites

+
    +
  • Webflow - All-in-one web design platform
  • +
+

Ecommerce

+
    +
  • Shopify - Build your ecommerce store
  • +
  • Podia - Easily sell memberships, online courses and digital products
  • +
  • Monto - Product reviews for Webflow
  • +
  • Hingeto - Start your own Amazon-style marketplace
  • +
  • Volusion - Ecommerce website store & shopping cart software
  • +
+

Email

+
    +
  • Revue - Editorial newsletters tool for writers and publishers
  • +
  • Sendgrid - Email delivery service
  • +
  • Postcards - Create awesome emails with drag & drop simplicity
  • +
  • BEE - Create beautiful emails, fast.
  • +
  • Stripo - Free email template builder
  • +
  • Substack - Paid newsletters made simple
  • +
  • Mailchimp - Free emailing software
  • +
  • Converkit - Send automated emailing campaigns
  • +
+

Forms

+
    +
  • Typeform - Build beautiful conversational forms
  • +
  • Google Forms - Free forms from Google that connect directly to Google Sheets
  • +
  • Jotform - Online form builder & form creator
  • +
  • Paperform - Beautiful forms that feel like yours
  • +
+

Internal

+
    +
  • Coda - Build docs as powerful as apps
  • +
  • Nuclino - Knowledge base and collaboration
  • +
  • Contractbook - Efficient contract management
  • +
+

Internal, Web Apps

+
    +
  • Retool - Build custom internal tools in minutes
  • +
+

Landing Pages

+
    +
  • Landen - Beautiful Landing Pages. Designed Instantly
  • +
  • Launchaco - Simple landing pages for your startup
  • +
  • Leadpages - Landing page builder & lead gen software
  • +
  • Instapage - Leanding pages, up to 6x more conversions
  • +
  • Unbounce - Landing Pages - More Powerful Customization
  • +
  • Leeflets - Functional landing pages for all kind of things
  • +
  • RIVYT - Websites for Video Creators
  • +
+

Landing Pages, Websites

+
    +
  • Carrd - Build simple, fully responsive one-page sites
  • +
+

Marketing

+
    +
  • Outgrow - Boost your marketing with highly interactive content
  • +
  • Rewardful - Instant Affiliate & Referral Programs for Stripe
  • +
  • Fortvision - Create interactive experiences that lead to higher conversions
  • +
+

Marketplace

+
    +
  • Sharetribe - Create your first marketplace without code
  • +
+

Membership, Websites

+
    +
  • Memberstack - Memberships & gated content for websites
  • +
+

Mobile Apps

+
    +
  • Dropsource - Build and publish native mobile app without coding
  • +
  • Glide - Create mobile apps from Google Sheets
  • +
  • Lightwell - A simple tool for creating native iOS apps on Mac.
  • +
  • Adalo - Create apps as easy as making a slide deck
  • +
  • App Inventor - Create powerful Android apps without code using blocs coding
  • +
  • Thunkable - Create beautiful and powerful mobile apps without code
  • +
+

Mobile Apps, Video Games

+ +

Payment

+
    +
  • Stripe - Payment integration and management
  • +
  • Paypal - Send Money, Online or Set up a Merchant Store
  • +
  • Buy me a coffee - Easy way to support a projet
  • +
+

Payment, Ecommerce

+
    +
  • Gumroad - Sell anything directly to anyone
  • +
+

Payment, Membership

+
    +
  • Patreon - Easy way to contribute to a project
  • +
+

Podcast

+
    +
  • Anchor - The best way to create your podcast
  • +
+

Scrapers

+ +

Video

+
    +
  • Loom - Seamless screen, mic, and camera recording for Chrome
  • +
+

Voice

+
    +
  • Voiceflow - Build voice apps in your browser without coding
  • +
  • Vuix - Design voice apps in minutes
  • +
  • ApitoBot - Create an Alexa Skill or Google Action in minutes
  • +
+

VR

+
    +
  • Instavr - Make your VR apps in minutes
  • +
+

Web Apps

+
    +
  • Bubble - Build a fully functional web app without any code.
  • +
  • Corvid - Build advanced web applications, hassle-free
  • +
  • Boundless - Create dynamic, multisided web apps without coding
  • +
+

Websites

+
    +
  • Sheet2site - Turn your Google Sheets into a website
  • +
  • Universe - Make an awesome website from your phone
  • +
  • Table2Site - Generate websites from your Airtable base
  • +
  • Squarespace - All-in-one platform to build a beautiful online e-commerce
  • +
  • Wix - Free website builder
  • +
  • IM Creator - Free website builder
  • +
  • Weebly - Build a free website or online store
  • +
  • Webnode - Easy & Free website maker
  • +
  • Jimdo - Your website builder
  • +
  • Bookmark - Create a Website with AI
  • +
  • Strikingly - Make a website in minutes
  • +
  • Tilda - Create beautiful websites without any code
  • +
+

Websites, Membership

+
    +
  • Memberspace - Turn your audience into paying members.
  • +
+ +

Awesome-no-code-tools

+

This awesome list links relevant tools for required to make apps/sites/chatbot and any digital tools without code!

+

I know that some of you are thinking "What is awesome without code? on Github???" But you never know when having such a tool might become handy.

+

This list is based on the incredible work done by Louis Veyret & Clément Barberousse and published as a google sheet. I am saving it here as a safekeeping and to maintain it. +Originally published as

+
+

Outils pour créer des sites web, applications mobiles, chatbot sans coder. +Par Louis Veyret & Clément Barberousse +Source : https://docs.google.com/spreadsheets/d/1QRhocTMg1cZAZyWz5vznqg6KdZrzU-b557Il8p0Q7HM/edit#gid=1754454108

+
+

Awesome list

+

Analytics

+ +

Automation

+
    +
  • Zapier - Connect and automate 500+ web apps
  • +
  • Integromat - The glue of the internet
  • +
  • IFTTT - Do more with the services you love
  • +
  • ActionDesk - Build powerful automations with your spreadsheet skills
  • +
  • Microsoft Flow - Automate tasks by integrating your favorite apps
  • +
  • Wayscript - A rapid scripting platform with drag-n-drop interface for Python and Javascript
  • +
  • Tray - Advanced integration platform for connecting up the tools you use every day
  • +
  • Automate Io - Put your business on autopilot. Connect 100+ business apps.
  • +
  • Blockspring - Supercharge your list building, reporting, and landing pages.
  • +
  • Oplim - Custom tasks on your website with zero code
  • +
  • Diagram - Nocode backend API builder with MongoDB and Firestore
  • +
  • Outfunnel - Keep customer data in sync across sales and marketing tools
  • +
+

Automation, Scrapers

+ +

Business Apps

+
    +
  • Betty Blocks - No-code enterprise application development
  • +
  • AppSheet - Intelligent no-code app development platform
  • +
  • Quick Base - Best way to manage data and automate processes, so you can accomplish more
  • +
  • Zoho Creator - Custom apps to run your business.
  • +
  • Calcapp - Build apps with your spreadsheet skills
  • +
+

Chatbots

+
    +
  • Manychat - Create a Messenger bot in minutes
  • +
  • It's Alive - Create a Facebook bot in minutes
  • +
  • Chatfuel - Create chatbots for your audience
  • +
  • Landbot - Lead generation landing page as chatbot
  • +
  • Botsify - Create your own automated chatbot online
  • +
  • Chatamo - Create intelligent voice and chatbot for marketing and sales
  • +
  • Flow XO - Create a chatbot with zero coding skills required
  • +
  • Smooch - Instantly deploy yout bots wherever users are
  • +
  • Rulai - AI Chatbot to deliver Scalable Self Service
  • +
+

Collaboration

+
    +
  • Notion - All-in-one workspace - notes, tasks, wikis & databases
  • +
  • Trello - All-in-one workspace and collaboration for businesses
  • +
+

Collaboration, Internal

+
    +
  • Quip - One place for all your team's work
  • +
+

CRM

+
    +
  • Salesflare - Simple & powerful CRM for small businesses
  • +
  • Pipedrive - CRM Gestion de leads en pipeline
  • +
+

CRM, Marketing

+
    +
  • Hubspot - A full platform of marketing, sales, customer service and CRM software
  • +
+

Customer Support

+
    +
  • Drift - Customer support chatbot
  • +
  • Crisp - Customer support directly in your website
  • +
+

Customer Support, Marketing, CRM

+
    +
  • Intercom - All-in-one customer support
  • +
+

Data, Marketing

+
    +
  • Hotjar - See how your visitors are really using your site
  • +
+

Database

+
    +
  • Airtable - Realtime spreadsheet database hybrid
  • +
  • NocoDB - Free & Open Source Airtable alternative - turns any SQL database into smart spreadsheet
  • +
  • Trevor - Query your live data, without code
  • +
+

Design

+
    +
  • Figma - The first interface design tool with real-time collaboration
  • +
  • unDraw - Free, open-source illustrations for everyone
  • +
+

Design, Websites

+
    +
  • Webflow - All-in-one web design platform
  • +
+

Ecommerce

+
    +
  • Shopify - Build your ecommerce store
  • +
  • Podia - Easily sell memberships, online courses and digital products
  • +
  • Monto - Product reviews for Webflow
  • +
  • Hingeto - Start your own Amazon-style marketplace
  • +
  • Volusion - Ecommerce website store & shopping cart software
  • +
+

Email

+
    +
  • Revue - Editorial newsletters tool for writers and publishers
  • +
  • Sendgrid - Email delivery service
  • +
  • Postcards - Create awesome emails with drag & drop simplicity
  • +
  • BEE - Create beautiful emails, fast.
  • +
  • Stripo - Free email template builder
  • +
  • Substack - Paid newsletters made simple
  • +
  • Mailchimp - Free emailing software
  • +
  • Converkit - Send automated emailing campaigns
  • +
+

Forms

+
    +
  • Typeform - Build beautiful conversational forms
  • +
  • Google Forms - Free forms from Google that connect directly to Google Sheets
  • +
  • Jotform - Online form builder & form creator
  • +
  • Paperform - Beautiful forms that feel like yours
  • +
+

Internal

+
    +
  • Coda - Build docs as powerful as apps
  • +
  • Nuclino - Knowledge base and collaboration
  • +
  • Contractbook - Efficient contract management
  • +
+

Internal, Web Apps

+
    +
  • Retool - Build custom internal tools in minutes
  • +
+

Landing Pages

+
    +
  • Landen - Beautiful Landing Pages. Designed Instantly
  • +
  • Launchaco - Simple landing pages for your startup
  • +
  • Leadpages - Landing page builder & lead gen software
  • +
  • Instapage - Leanding pages, up to 6x more conversions
  • +
  • Unbounce - Landing Pages - More Powerful Customization
  • +
  • Leeflets - Functional landing pages for all kind of things
  • +
  • RIVYT - Websites for Video Creators
  • +
+

Landing Pages, Websites

+
    +
  • Carrd - Build simple, fully responsive one-page sites
  • +
+

Marketing

+
    +
  • Outgrow - Boost your marketing with highly interactive content
  • +
  • Rewardful - Instant Affiliate & Referral Programs for Stripe
  • +
  • Fortvision - Create interactive experiences that lead to higher conversions
  • +
+

Marketplace

+
    +
  • Sharetribe - Create your first marketplace without code
  • +
+

Membership, Websites

+
    +
  • Memberstack - Memberships & gated content for websites
  • +
+

Mobile Apps

+
    +
  • Dropsource - Build and publish native mobile app without coding
  • +
  • Glide - Create mobile apps from Google Sheets
  • +
  • Lightwell - A simple tool for creating native iOS apps on Mac.
  • +
  • Adalo - Create apps as easy as making a slide deck
  • +
  • App Inventor - Create powerful Android apps without code using blocs coding
  • +
  • Thunkable - Create beautiful and powerful mobile apps without code
  • +
+

Mobile Apps, Video Games

+ +

Payment

+
    +
  • Stripe - Payment integration and management
  • +
  • Paypal - Send Money, Online or Set up a Merchant Store
  • +
  • Buy me a coffee - Easy way to support a projet
  • +
+

Payment, Ecommerce

+
    +
  • Gumroad - Sell anything directly to anyone
  • +
+

Payment, Membership

+
    +
  • Patreon - Easy way to contribute to a project
  • +
+

Podcast

+
    +
  • Anchor - The best way to create your podcast
  • +
+

Scrapers

+ +

Video

+
    +
  • Loom - Seamless screen, mic, and camera recording for Chrome
  • +
+

Voice

+
    +
  • Voiceflow - Build voice apps in your browser without coding
  • +
  • Vuix - Design voice apps in minutes
  • +
  • ApitoBot - Create an Alexa Skill or Google Action in minutes
  • +
+

VR

+
    +
  • Instavr - Make your VR apps in minutes
  • +
+

Web Apps

+
    +
  • Bubble - Build a fully functional web app without any code.
  • +
  • Corvid - Build advanced web applications, hassle-free
  • +
  • Boundless - Create dynamic, multisided web apps without coding
  • +
+

Websites

+
    +
  • Sheet2site - Turn your Google Sheets into a website
  • +
  • Universe - Make an awesome website from your phone
  • +
  • Table2Site - Generate websites from your Airtable base
  • +
  • Squarespace - All-in-one platform to build a beautiful online e-commerce
  • +
  • Wix - Free website builder
  • +
  • IM Creator - Free website builder
  • +
  • Weebly - Build a free website or online store
  • +
  • Webnode - Easy & Free website maker
  • +
  • Jimdo - Your website builder
  • +
  • Bookmark - Create a Website with AI
  • +
  • Strikingly - Make a website in minutes
  • +
  • Tilda - Create beautiful websites without any code
  • +
+

Websites, Membership

+
    +
  • Memberspace - Turn your audience into paying members.
  • +
+ +

Awesome-no-code-tools

+

This awesome list links relevant tools for required to make apps/sites/chatbot and any digital tools without code!

+

I know that some of you are thinking "What is awesome without code? on Github???" But you never know when having such a tool might become handy.

+

This list is based on the incredible work done by Louis Veyret & Clément Barberousse and published as a google sheet. I am saving it here as a safekeeping and to maintain it. +Originally published as

+
+

Outils pour créer des sites web, applications mobiles, chatbot sans coder. +Par Louis Veyret & Clément Barberousse +Source : https://docs.google.com/spreadsheets/d/1QRhocTMg1cZAZyWz5vznqg6KdZrzU-b557Il8p0Q7HM/edit#gid=1754454108

+
+

Awesome list

+

Analytics

+ +

Automation

+
    +
  • Zapier - Connect and automate 500+ web apps
  • +
  • Integromat - The glue of the internet
  • +
  • IFTTT - Do more with the services you love
  • +
  • ActionDesk - Build powerful automations with your spreadsheet skills
  • +
  • Microsoft Flow - Automate tasks by integrating your favorite apps
  • +
  • Wayscript - A rapid scripting platform with drag-n-drop interface for Python and Javascript
  • +
  • Tray - Advanced integration platform for connecting up the tools you use every day
  • +
  • Automate Io - Put your business on autopilot. Connect 100+ business apps.
  • +
  • Blockspring - Supercharge your list building, reporting, and landing pages.
  • +
  • Oplim - Custom tasks on your website with zero code
  • +
  • Diagram - Nocode backend API builder with MongoDB and Firestore
  • +
  • Outfunnel - Keep customer data in sync across sales and marketing tools
  • +
+

Automation, Scrapers

+ +

Business Apps

+
    +
  • Betty Blocks - No-code enterprise application development
  • +
  • AppSheet - Intelligent no-code app development platform
  • +
  • Quick Base - Best way to manage data and automate processes, so you can accomplish more
  • +
  • Zoho Creator - Custom apps to run your business.
  • +
  • Calcapp - Build apps with your spreadsheet skills
  • +
+

Chatbots

+
    +
  • Manychat - Create a Messenger bot in minutes
  • +
  • It's Alive - Create a Facebook bot in minutes
  • +
  • Chatfuel - Create chatbots for your audience
  • +
  • Landbot - Lead generation landing page as chatbot
  • +
  • Botsify - Create your own automated chatbot online
  • +
  • Chatamo - Create intelligent voice and chatbot for marketing and sales
  • +
  • Flow XO - Create a chatbot with zero coding skills required
  • +
  • Smooch - Instantly deploy yout bots wherever users are
  • +
  • Rulai - AI Chatbot to deliver Scalable Self Service
  • +
+

Collaboration

+
    +
  • Notion - All-in-one workspace - notes, tasks, wikis & databases
  • +
  • Trello - All-in-one workspace and collaboration for businesses
  • +
+

Collaboration, Internal

+
    +
  • Quip - One place for all your team's work
  • +
+

CRM

+
    +
  • Salesflare - Simple & powerful CRM for small businesses
  • +
  • Pipedrive - CRM Gestion de leads en pipeline
  • +
+

CRM, Marketing

+
    +
  • Hubspot - A full platform of marketing, sales, customer service and CRM software
  • +
+

Customer Support

+
    +
  • Drift - Customer support chatbot
  • +
  • Crisp - Customer support directly in your website
  • +
+

Customer Support, Marketing, CRM

+
    +
  • Intercom - All-in-one customer support
  • +
+

Data, Marketing

+
    +
  • Hotjar - See how your visitors are really using your site
  • +
+

Database

+
    +
  • Airtable - Realtime spreadsheet database hybrid
  • +
  • NocoDB - Free & Open Source Airtable alternative - turns any SQL database into smart spreadsheet
  • +
  • Trevor - Query your live data, without code
  • +
+

Design

+
    +
  • Figma - The first interface design tool with real-time collaboration
  • +
  • unDraw - Free, open-source illustrations for everyone
  • +
+

Design, Websites

+
    +
  • Webflow - All-in-one web design platform
  • +
+

Ecommerce

+
    +
  • Shopify - Build your ecommerce store
  • +
  • Podia - Easily sell memberships, online courses and digital products
  • +
  • Monto - Product reviews for Webflow
  • +
  • Hingeto - Start your own Amazon-style marketplace
  • +
  • Volusion - Ecommerce website store & shopping cart software
  • +
+

Email

+
    +
  • Revue - Editorial newsletters tool for writers and publishers
  • +
  • Sendgrid - Email delivery service
  • +
  • Postcards - Create awesome emails with drag & drop simplicity
  • +
  • BEE - Create beautiful emails, fast.
  • +
  • Stripo - Free email template builder
  • +
  • Substack - Paid newsletters made simple
  • +
  • Mailchimp - Free emailing software
  • +
  • Converkit - Send automated emailing campaigns
  • +
+

Forms

+
    +
  • Typeform - Build beautiful conversational forms
  • +
  • Google Forms - Free forms from Google that connect directly to Google Sheets
  • +
  • Jotform - Online form builder & form creator
  • +
  • Paperform - Beautiful forms that feel like yours
  • +
+

Internal

+
    +
  • Coda - Build docs as powerful as apps
  • +
  • Nuclino - Knowledge base and collaboration
  • +
  • Contractbook - Efficient contract management
  • +
+

Internal, Web Apps

+
    +
  • Retool - Build custom internal tools in minutes
  • +
+

Landing Pages

+
    +
  • Landen - Beautiful Landing Pages. Designed Instantly
  • +
  • Launchaco - Simple landing pages for your startup
  • +
  • Leadpages - Landing page builder & lead gen software
  • +
  • Instapage - Leanding pages, up to 6x more conversions
  • +
  • Unbounce - Landing Pages - More Powerful Customization
  • +
  • Leeflets - Functional landing pages for all kind of things
  • +
  • RIVYT - Websites for Video Creators
  • +
+

Landing Pages, Websites

+
    +
  • Carrd - Build simple, fully responsive one-page sites
  • +
+

Marketing

+
    +
  • Outgrow - Boost your marketing with highly interactive content
  • +
  • Rewardful - Instant Affiliate & Referral Programs for Stripe
  • +
  • Fortvision - Create interactive experiences that lead to higher conversions
  • +
+

Marketplace

+
    +
  • Sharetribe - Create your first marketplace without code
  • +
+

Membership, Websites

+
    +
  • Memberstack - Memberships & gated content for websites
  • +
+

Mobile Apps

+
    +
  • Dropsource - Build and publish native mobile app without coding
  • +
  • Glide - Create mobile apps from Google Sheets
  • +
  • Lightwell - A simple tool for creating native iOS apps on Mac.
  • +
  • Adalo - Create apps as easy as making a slide deck
  • +
  • App Inventor - Create powerful Android apps without code using blocs coding
  • +
  • Thunkable - Create beautiful and powerful mobile apps without code
  • +
+

Mobile Apps, Video Games

+ +

Payment

+
    +
  • Stripe - Payment integration and management
  • +
  • Paypal - Send Money, Online or Set up a Merchant Store
  • +
  • Buy me a coffee - Easy way to support a projet
  • +
+

Payment, Ecommerce

+
    +
  • Gumroad - Sell anything directly to anyone
  • +
+

Payment, Membership

+
    +
  • Patreon - Easy way to contribute to a project
  • +
+

Podcast

+
    +
  • Anchor - The best way to create your podcast
  • +
+

Scrapers

+ +

Video

+
    +
  • Loom - Seamless screen, mic, and camera recording for Chrome
  • +
+

Voice

+
    +
  • Voiceflow - Build voice apps in your browser without coding
  • +
  • Vuix - Design voice apps in minutes
  • +
  • ApitoBot - Create an Alexa Skill or Google Action in minutes
  • +
+

VR

+
    +
  • Instavr - Make your VR apps in minutes
  • +
+

Web Apps

+
    +
  • Bubble - Build a fully functional web app without any code.
  • +
  • Corvid - Build advanced web applications, hassle-free
  • +
  • Boundless - Create dynamic, multisided web apps without coding
  • +
+

Websites

+
    +
  • Sheet2site - Turn your Google Sheets into a website
  • +
  • Universe - Make an awesome website from your phone
  • +
  • Table2Site - Generate websites from your Airtable base
  • +
  • Squarespace - All-in-one platform to build a beautiful online e-commerce
  • +
  • Wix - Free website builder
  • +
  • IM Creator - Free website builder
  • +
  • Weebly - Build a free website or online store
  • +
  • Webnode - Easy & Free website maker
  • +
  • Jimdo - Your website builder
  • +
  • Bookmark - Create a Website with AI
  • +
  • Strikingly - Make a website in minutes
  • +
  • Tilda - Create beautiful websites without any code
  • +
+

Websites, Membership

+
    +
  • Memberspace - Turn your audience into paying members.
  • +
+ +

Awesome-no-code-tools

+

This awesome list links relevant tools for required to make apps/sites/chatbot and any digital tools without code!

+

I know that some of you are thinking "What is awesome without code? on Github???" But you never know when having such a tool might become handy.

+

This list is based on the incredible work done by Louis Veyret & Clément Barberousse and published as a google sheet. I am saving it here as a safekeeping and to maintain it. +Originally published as

+
+

Outils pour créer des sites web, applications mobiles, chatbot sans coder. +Par Louis Veyret & Clément Barberousse +Source : https://docs.google.com/spreadsheets/d/1QRhocTMg1cZAZyWz5vznqg6KdZrzU-b557Il8p0Q7HM/edit#gid=1754454108

+
+

Awesome list

+

Analytics

+ +

Automation

+
    +
  • Zapier - Connect and automate 500+ web apps
  • +
  • Integromat - The glue of the internet
  • +
  • IFTTT - Do more with the services you love
  • +
  • ActionDesk - Build powerful automations with your spreadsheet skills
  • +
  • Microsoft Flow - Automate tasks by integrating your favorite apps
  • +
  • Wayscript - A rapid scripting platform with drag-n-drop interface for Python and Javascript
  • +
  • Tray - Advanced integration platform for connecting up the tools you use every day
  • +
  • Automate Io - Put your business on autopilot. Connect 100+ business apps.
  • +
  • Blockspring - Supercharge your list building, reporting, and landing pages.
  • +
  • Oplim - Custom tasks on your website with zero code
  • +
  • Diagram - Nocode backend API builder with MongoDB and Firestore
  • +
  • Outfunnel - Keep customer data in sync across sales and marketing tools
  • +
+

Automation, Scrapers

+ +

Business Apps

+
    +
  • Betty Blocks - No-code enterprise application development
  • +
  • AppSheet - Intelligent no-code app development platform
  • +
  • Quick Base - Best way to manage data and automate processes, so you can accomplish more
  • +
  • Zoho Creator - Custom apps to run your business.
  • +
  • Calcapp - Build apps with your spreadsheet skills
  • +
+

Chatbots

+
    +
  • Manychat - Create a Messenger bot in minutes
  • +
  • It's Alive - Create a Facebook bot in minutes
  • +
  • Chatfuel - Create chatbots for your audience
  • +
  • Landbot - Lead generation landing page as chatbot
  • +
  • Botsify - Create your own automated chatbot online
  • +
  • Chatamo - Create intelligent voice and chatbot for marketing and sales
  • +
  • Flow XO - Create a chatbot with zero coding skills required
  • +
  • Smooch - Instantly deploy yout bots wherever users are
  • +
  • Rulai - AI Chatbot to deliver Scalable Self Service
  • +
+

Collaboration

+
    +
  • Notion - All-in-one workspace - notes, tasks, wikis & databases
  • +
  • Trello - All-in-one workspace and collaboration for businesses
  • +
+

Collaboration, Internal

+
    +
  • Quip - One place for all your team's work
  • +
+

CRM

+
    +
  • Salesflare - Simple & powerful CRM for small businesses
  • +
  • Pipedrive - CRM Gestion de leads en pipeline
  • +
+

CRM, Marketing

+
    +
  • Hubspot - A full platform of marketing, sales, customer service and CRM software
  • +
+

Customer Support

+
    +
  • Drift - Customer support chatbot
  • +
  • Crisp - Customer support directly in your website
  • +
+

Customer Support, Marketing, CRM

+
    +
  • Intercom - All-in-one customer support
  • +
+

Data, Marketing

+
    +
  • Hotjar - See how your visitors are really using your site
  • +
+

Database

+
    +
  • Airtable - Realtime spreadsheet database hybrid
  • +
  • NocoDB - Free & Open Source Airtable alternative - turns any SQL database into smart spreadsheet
  • +
  • Trevor - Query your live data, without code
  • +
+

Design

+
    +
  • Figma - The first interface design tool with real-time collaboration
  • +
  • unDraw - Free, open-source illustrations for everyone
  • +
+

Design, Websites

+
    +
  • Webflow - All-in-one web design platform
  • +
+

Ecommerce

+
    +
  • Shopify - Build your ecommerce store
  • +
  • Podia - Easily sell memberships, online courses and digital products
  • +
  • Monto - Product reviews for Webflow
  • +
  • Hingeto - Start your own Amazon-style marketplace
  • +
  • Volusion - Ecommerce website store & shopping cart software
  • +
+

Email

+
    +
  • Revue - Editorial newsletters tool for writers and publishers
  • +
  • Sendgrid - Email delivery service
  • +
  • Postcards - Create awesome emails with drag & drop simplicity
  • +
  • BEE - Create beautiful emails, fast.
  • +
  • Stripo - Free email template builder
  • +
  • Substack - Paid newsletters made simple
  • +
  • Mailchimp - Free emailing software
  • +
  • Converkit - Send automated emailing campaigns
  • +
+

Forms

+
    +
  • Typeform - Build beautiful conversational forms
  • +
  • Google Forms - Free forms from Google that connect directly to Google Sheets
  • +
  • Jotform - Online form builder & form creator
  • +
  • Paperform - Beautiful forms that feel like yours
  • +
+

Internal

+
    +
  • Coda - Build docs as powerful as apps
  • +
  • Nuclino - Knowledge base and collaboration
  • +
  • Contractbook - Efficient contract management
  • +
+

Internal, Web Apps

+
    +
  • Retool - Build custom internal tools in minutes
  • +
+

Landing Pages

+
    +
  • Landen - Beautiful Landing Pages. Designed Instantly
  • +
  • Launchaco - Simple landing pages for your startup
  • +
  • Leadpages - Landing page builder & lead gen software
  • +
  • Instapage - Leanding pages, up to 6x more conversions
  • +
  • Unbounce - Landing Pages - More Powerful Customization
  • +
  • Leeflets - Functional landing pages for all kind of things
  • +
  • RIVYT - Websites for Video Creators
  • +
+

Landing Pages, Websites

+
    +
  • Carrd - Build simple, fully responsive one-page sites
  • +
+

Marketing

+
    +
  • Outgrow - Boost your marketing with highly interactive content
  • +
  • Rewardful - Instant Affiliate & Referral Programs for Stripe
  • +
  • Fortvision - Create interactive experiences that lead to higher conversions
  • +
+

Marketplace

+
    +
  • Sharetribe - Create your first marketplace without code
  • +
+

Membership, Websites

+
    +
  • Memberstack - Memberships & gated content for websites
  • +
+

Mobile Apps

+
    +
  • Dropsource - Build and publish native mobile app without coding
  • +
  • Glide - Create mobile apps from Google Sheets
  • +
  • Lightwell - A simple tool for creating native iOS apps on Mac.
  • +
  • Adalo - Create apps as easy as making a slide deck
  • +
  • App Inventor - Create powerful Android apps without code using blocs coding
  • +
  • Thunkable - Create beautiful and powerful mobile apps without code
  • +
+

Mobile Apps, Video Games

+ +

Payment

+
    +
  • Stripe - Payment integration and management
  • +
  • Paypal - Send Money, Online or Set up a Merchant Store
  • +
  • Buy me a coffee - Easy way to support a projet
  • +
+

Payment, Ecommerce

+
    +
  • Gumroad - Sell anything directly to anyone
  • +
+

Payment, Membership

+
    +
  • Patreon - Easy way to contribute to a project
  • +
+

Podcast

+
    +
  • Anchor - The best way to create your podcast
  • +
+

Scrapers

+ +

Video

+
    +
  • Loom - Seamless screen, mic, and camera recording for Chrome
  • +
+

Voice

+
    +
  • Voiceflow - Build voice apps in your browser without coding
  • +
  • Vuix - Design voice apps in minutes
  • +
  • ApitoBot - Create an Alexa Skill or Google Action in minutes
  • +
+

VR

+
    +
  • Instavr - Make your VR apps in minutes
  • +
+

Web Apps

+
    +
  • Bubble - Build a fully functional web app without any code.
  • +
  • Corvid - Build advanced web applications, hassle-free
  • +
  • Boundless - Create dynamic, multisided web apps without coding
  • +
+

Websites

+
    +
  • Sheet2site - Turn your Google Sheets into a website
  • +
  • Universe - Make an awesome website from your phone
  • +
  • Table2Site - Generate websites from your Airtable base
  • +
  • Squarespace - All-in-one platform to build a beautiful online e-commerce
  • +
  • Wix - Free website builder
  • +
  • IM Creator - Free website builder
  • +
  • Weebly - Build a free website or online store
  • +
  • Webnode - Easy & Free website maker
  • +
  • Jimdo - Your website builder
  • +
  • Bookmark - Create a Website with AI
  • +
  • Strikingly - Make a website in minutes
  • +
  • Tilda - Create beautiful websites without any code
  • +
+

Websites, Membership

+
    +
  • Memberspace - Turn your audience into paying members.
  • +
+ +

Awesome-no-code-tools

+

This awesome list links relevant tools for required to make apps/sites/chatbot and any digital tools without code!

+

I know that some of you are thinking "What is awesome without code? on Github???" But you never know when having such a tool might become handy.

+

This list is based on the incredible work done by Louis Veyret & Clément Barberousse and published as a google sheet. I am saving it here as a safekeeping and to maintain it. +Originally published as

+
+

Outils pour créer des sites web, applications mobiles, chatbot sans coder. +Par Louis Veyret & Clément Barberousse +Source : https://docs.google.com/spreadsheets/d/1QRhocTMg1cZAZyWz5vznqg6KdZrzU-b557Il8p0Q7HM/edit#gid=1754454108

+
+

Awesome list

+

Analytics

+ +

Automation

+
    +
  • Zapier - Connect and automate 500+ web apps
  • +
  • Integromat - The glue of the internet
  • +
  • IFTTT - Do more with the services you love
  • +
  • ActionDesk - Build powerful automations with your spreadsheet skills
  • +
  • Microsoft Flow - Automate tasks by integrating your favorite apps
  • +
  • Wayscript - A rapid scripting platform with drag-n-drop interface for Python and Javascript
  • +
  • Tray - Advanced integration platform for connecting up the tools you use every day
  • +
  • Automate Io - Put your business on autopilot. Connect 100+ business apps.
  • +
  • Blockspring - Supercharge your list building, reporting, and landing pages.
  • +
  • Oplim - Custom tasks on your website with zero code
  • +
  • Diagram - Nocode backend API builder with MongoDB and Firestore
  • +
  • Outfunnel - Keep customer data in sync across sales and marketing tools
  • +
+

Automation, Scrapers

+ +

Business Apps

+
    +
  • Betty Blocks - No-code enterprise application development
  • +
  • AppSheet - Intelligent no-code app development platform
  • +
  • Quick Base - Best way to manage data and automate processes, so you can accomplish more
  • +
  • Zoho Creator - Custom apps to run your business.
  • +
  • Calcapp - Build apps with your spreadsheet skills
  • +
+

Chatbots

+
    +
  • Manychat - Create a Messenger bot in minutes
  • +
  • It's Alive - Create a Facebook bot in minutes
  • +
  • Chatfuel - Create chatbots for your audience
  • +
  • Landbot - Lead generation landing page as chatbot
  • +
  • Botsify - Create your own automated chatbot online
  • +
  • Chatamo - Create intelligent voice and chatbot for marketing and sales
  • +
  • Flow XO - Create a chatbot with zero coding skills required
  • +
  • Smooch - Instantly deploy yout bots wherever users are
  • +
  • Rulai - AI Chatbot to deliver Scalable Self Service
  • +
+

Collaboration

+
    +
  • Notion - All-in-one workspace - notes, tasks, wikis & databases
  • +
  • Trello - All-in-one workspace and collaboration for businesses
  • +
+

Collaboration, Internal

+
    +
  • Quip - One place for all your team's work
  • +
+

CRM

+
    +
  • Salesflare - Simple & powerful CRM for small businesses
  • +
  • Pipedrive - CRM Gestion de leads en pipeline
  • +
+

CRM, Marketing

+
    +
  • Hubspot - A full platform of marketing, sales, customer service and CRM software
  • +
+

Customer Support

+
    +
  • Drift - Customer support chatbot
  • +
  • Crisp - Customer support directly in your website
  • +
+

Customer Support, Marketing, CRM

+
    +
  • Intercom - All-in-one customer support
  • +
+

Data, Marketing

+
    +
  • Hotjar - See how your visitors are really using your site
  • +
+

Database

+
    +
  • Airtable - Realtime spreadsheet database hybrid
  • +
  • NocoDB - Free & Open Source Airtable alternative - turns any SQL database into smart spreadsheet
  • +
  • Trevor - Query your live data, without code
  • +
+

Design

+
    +
  • Figma - The first interface design tool with real-time collaboration
  • +
  • unDraw - Free, open-source illustrations for everyone
  • +
+

Design, Websites

+
    +
  • Webflow - All-in-one web design platform
  • +
+

Ecommerce

+
    +
  • Shopify - Build your ecommerce store
  • +
  • Podia - Easily sell memberships, online courses and digital products
  • +
  • Monto - Product reviews for Webflow
  • +
  • Hingeto - Start your own Amazon-style marketplace
  • +
  • Volusion - Ecommerce website store & shopping cart software
  • +
+

Email

+
    +
  • Revue - Editorial newsletters tool for writers and publishers
  • +
  • Sendgrid - Email delivery service
  • +
  • Postcards - Create awesome emails with drag & drop simplicity
  • +
  • BEE - Create beautiful emails, fast.
  • +
  • Stripo - Free email template builder
  • +
  • Substack - Paid newsletters made simple
  • +
  • Mailchimp - Free emailing software
  • +
  • Converkit - Send automated emailing campaigns
  • +
+

Forms

+
    +
  • Typeform - Build beautiful conversational forms
  • +
  • Google Forms - Free forms from Google that connect directly to Google Sheets
  • +
  • Jotform - Online form builder & form creator
  • +
  • Paperform - Beautiful forms that feel like yours
  • +
+

Internal

+
    +
  • Coda - Build docs as powerful as apps
  • +
  • Nuclino - Knowledge base and collaboration
  • +
  • Contractbook - Efficient contract management
  • +
+

Internal, Web Apps

+
    +
  • Retool - Build custom internal tools in minutes
  • +
+

Landing Pages

+
    +
  • Landen - Beautiful Landing Pages. Designed Instantly
  • +
  • Launchaco - Simple landing pages for your startup
  • +
  • Leadpages - Landing page builder & lead gen software
  • +
  • Instapage - Leanding pages, up to 6x more conversions
  • +
  • Unbounce - Landing Pages - More Powerful Customization
  • +
  • Leeflets - Functional landing pages for all kind of things
  • +
  • RIVYT - Websites for Video Creators
  • +
+

Landing Pages, Websites

+
    +
  • Carrd - Build simple, fully responsive one-page sites
  • +
+

Marketing

+
    +
  • Outgrow - Boost your marketing with highly interactive content
  • +
  • Rewardful - Instant Affiliate & Referral Programs for Stripe
  • +
  • Fortvision - Create interactive experiences that lead to higher conversions
  • +
+

Marketplace

+
    +
  • Sharetribe - Create your first marketplace without code
  • +
+

Membership, Websites

+
    +
  • Memberstack - Memberships & gated content for websites
  • +
+

Mobile Apps

+
    +
  • Dropsource - Build and publish native mobile app without coding
  • +
  • Glide - Create mobile apps from Google Sheets
  • +
  • Lightwell - A simple tool for creating native iOS apps on Mac.
  • +
  • Adalo - Create apps as easy as making a slide deck
  • +
  • App Inventor - Create powerful Android apps without code using blocs coding
  • +
  • Thunkable - Create beautiful and powerful mobile apps without code
  • +
+

Mobile Apps, Video Games

+ +

Payment

+
    +
  • Stripe - Payment integration and management
  • +
  • Paypal - Send Money, Online or Set up a Merchant Store
  • +
  • Buy me a coffee - Easy way to support a projet
  • +
+

Payment, Ecommerce

+
    +
  • Gumroad - Sell anything directly to anyone
  • +
+

Payment, Membership

+
    +
  • Patreon - Easy way to contribute to a project
  • +
+

Podcast

+
    +
  • Anchor - The best way to create your podcast
  • +
+

Scrapers

+ +

Video

+
    +
  • Loom - Seamless screen, mic, and camera recording for Chrome
  • +
+

Voice

+
    +
  • Voiceflow - Build voice apps in your browser without coding
  • +
  • Vuix - Design voice apps in minutes
  • +
  • ApitoBot - Create an Alexa Skill or Google Action in minutes
  • +
+

VR

+
    +
  • Instavr - Make your VR apps in minutes
  • +
+

Web Apps

+
    +
  • Bubble - Build a fully functional web app without any code.
  • +
  • Corvid - Build advanced web applications, hassle-free
  • +
  • Boundless - Create dynamic, multisided web apps without coding
  • +
+

Websites

+
    +
  • Sheet2site - Turn your Google Sheets into a website
  • +
  • Universe - Make an awesome website from your phone
  • +
  • Table2Site - Generate websites from your Airtable base
  • +
  • Squarespace - All-in-one platform to build a beautiful online e-commerce
  • +
  • Wix - Free website builder
  • +
  • IM Creator - Free website builder
  • +
  • Weebly - Build a free website or online store
  • +
  • Webnode - Easy & Free website maker
  • +
  • Jimdo - Your website builder
  • +
  • Bookmark - Create a Website with AI
  • +
  • Strikingly - Make a website in minutes
  • +
  • Tilda - Create beautiful websites without any code
  • +
+

Websites, Membership

+
    +
  • Memberspace - Turn your audience into paying members.
  • +
+ +

Awesome-no-code-tools

+

This awesome list links relevant tools for required to make apps/sites/chatbot and any digital tools without code!

+

I know that some of you are thinking "What is awesome without code? on Github???" But you never know when having such a tool might become handy.

+

This list is based on the incredible work done by Louis Veyret & Clément Barberousse and published as a google sheet. I am saving it here as a safekeeping and to maintain it. +Originally published as

+
+

Outils pour créer des sites web, applications mobiles, chatbot sans coder. +Par Louis Veyret & Clément Barberousse +Source : https://docs.google.com/spreadsheets/d/1QRhocTMg1cZAZyWz5vznqg6KdZrzU-b557Il8p0Q7HM/edit#gid=1754454108

+
+

Awesome list

+

Analytics

+ +

Automation

+
    +
  • Zapier - Connect and automate 500+ web apps
  • +
  • Integromat - The glue of the internet
  • +
  • IFTTT - Do more with the services you love
  • +
  • ActionDesk - Build powerful automations with your spreadsheet skills
  • +
  • Microsoft Flow - Automate tasks by integrating your favorite apps
  • +
  • Wayscript - A rapid scripting platform with drag-n-drop interface for Python and Javascript
  • +
  • Tray - Advanced integration platform for connecting up the tools you use every day
  • +
  • Automate Io - Put your business on autopilot. Connect 100+ business apps.
  • +
  • Blockspring - Supercharge your list building, reporting, and landing pages.
  • +
  • Oplim - Custom tasks on your website with zero code
  • +
  • Diagram - Nocode backend API builder with MongoDB and Firestore
  • +
  • Outfunnel - Keep customer data in sync across sales and marketing tools
  • +
+

Automation, Scrapers

+ +

Business Apps

+
    +
  • Betty Blocks - No-code enterprise application development
  • +
  • AppSheet - Intelligent no-code app development platform
  • +
  • Quick Base - Best way to manage data and automate processes, so you can accomplish more
  • +
  • Zoho Creator - Custom apps to run your business.
  • +
  • Calcapp - Build apps with your spreadsheet skills
  • +
+

Chatbots

+
    +
  • Manychat - Create a Messenger bot in minutes
  • +
  • It's Alive - Create a Facebook bot in minutes
  • +
  • Chatfuel - Create chatbots for your audience
  • +
  • Landbot - Lead generation landing page as chatbot
  • +
  • Botsify - Create your own automated chatbot online
  • +
  • Chatamo - Create intelligent voice and chatbot for marketing and sales
  • +
  • Flow XO - Create a chatbot with zero coding skills required
  • +
  • Smooch - Instantly deploy yout bots wherever users are
  • +
  • Rulai - AI Chatbot to deliver Scalable Self Service
  • +
+

Collaboration

+
    +
  • Notion - All-in-one workspace - notes, tasks, wikis & databases
  • +
  • Trello - All-in-one workspace and collaboration for businesses
  • +
+

Collaboration, Internal

+
    +
  • Quip - One place for all your team's work
  • +
+

CRM

+
    +
  • Salesflare - Simple & powerful CRM for small businesses
  • +
  • Pipedrive - CRM Gestion de leads en pipeline
  • +
+

CRM, Marketing

+
    +
  • Hubspot - A full platform of marketing, sales, customer service and CRM software
  • +
+

Customer Support

+
    +
  • Drift - Customer support chatbot
  • +
  • Crisp - Customer support directly in your website
  • +
+

Customer Support, Marketing, CRM

+
    +
  • Intercom - All-in-one customer support
  • +
+

Data, Marketing

+
    +
  • Hotjar - See how your visitors are really using your site
  • +
+

Database

+
    +
  • Airtable - Realtime spreadsheet database hybrid
  • +
  • NocoDB - Free & Open Source Airtable alternative - turns any SQL database into smart spreadsheet
  • +
  • Trevor - Query your live data, without code
  • +
+

Design

+
    +
  • Figma - The first interface design tool with real-time collaboration
  • +
  • unDraw - Free, open-source illustrations for everyone
  • +
+

Design, Websites

+
    +
  • Webflow - All-in-one web design platform
  • +
+

Ecommerce

+
    +
  • Shopify - Build your ecommerce store
  • +
  • Podia - Easily sell memberships, online courses and digital products
  • +
  • Monto - Product reviews for Webflow
  • +
  • Hingeto - Start your own Amazon-style marketplace
  • +
  • Volusion - Ecommerce website store & shopping cart software
  • +
+

Email

+
    +
  • Revue - Editorial newsletters tool for writers and publishers
  • +
  • Sendgrid - Email delivery service
  • +
  • Postcards - Create awesome emails with drag & drop simplicity
  • +
  • BEE - Create beautiful emails, fast.
  • +
  • Stripo - Free email template builder
  • +
  • Substack - Paid newsletters made simple
  • +
  • Mailchimp - Free emailing software
  • +
  • Converkit - Send automated emailing campaigns
  • +
+

Forms

+
    +
  • Typeform - Build beautiful conversational forms
  • +
  • Google Forms - Free forms from Google that connect directly to Google Sheets
  • +
  • Jotform - Online form builder & form creator
  • +
  • Paperform - Beautiful forms that feel like yours
  • +
+

Internal

+
    +
  • Coda - Build docs as powerful as apps
  • +
  • Nuclino - Knowledge base and collaboration
  • +
  • Contractbook - Efficient contract management
  • +
+

Internal, Web Apps

+
    +
  • Retool - Build custom internal tools in minutes
  • +
+

Landing Pages

+
    +
  • Landen - Beautiful Landing Pages. Designed Instantly
  • +
  • Launchaco - Simple landing pages for your startup
  • +
  • Leadpages - Landing page builder & lead gen software
  • +
  • Instapage - Leanding pages, up to 6x more conversions
  • +
  • Unbounce - Landing Pages - More Powerful Customization
  • +
  • Leeflets - Functional landing pages for all kind of things
  • +
  • RIVYT - Websites for Video Creators
  • +
+

Landing Pages, Websites

+
    +
  • Carrd - Build simple, fully responsive one-page sites
  • +
+

Marketing

+
    +
  • Outgrow - Boost your marketing with highly interactive content
  • +
  • Rewardful - Instant Affiliate & Referral Programs for Stripe
  • +
  • Fortvision - Create interactive experiences that lead to higher conversions
  • +
+

Marketplace

+
    +
  • Sharetribe - Create your first marketplace without code
  • +
+

Membership, Websites

+
    +
  • Memberstack - Memberships & gated content for websites
  • +
+

Mobile Apps

+
    +
  • Dropsource - Build and publish native mobile app without coding
  • +
  • Glide - Create mobile apps from Google Sheets
  • +
  • Lightwell - A simple tool for creating native iOS apps on Mac.
  • +
  • Adalo - Create apps as easy as making a slide deck
  • +
  • App Inventor - Create powerful Android apps without code using blocs coding
  • +
  • Thunkable - Create beautiful and powerful mobile apps without code
  • +
+

Mobile Apps, Video Games

+ +

Payment

+
    +
  • Stripe - Payment integration and management
  • +
  • Paypal - Send Money, Online or Set up a Merchant Store
  • +
  • Buy me a coffee - Easy way to support a projet
  • +
+

Payment, Ecommerce

+
    +
  • Gumroad - Sell anything directly to anyone
  • +
+

Payment, Membership

+
    +
  • Patreon - Easy way to contribute to a project
  • +
+

Podcast

+
    +
  • Anchor - The best way to create your podcast
  • +
+

Scrapers

+ +

Video

+
    +
  • Loom - Seamless screen, mic, and camera recording for Chrome
  • +
+

Voice

+
    +
  • Voiceflow - Build voice apps in your browser without coding
  • +
  • Vuix - Design voice apps in minutes
  • +
  • ApitoBot - Create an Alexa Skill or Google Action in minutes
  • +
+

VR

+
    +
  • Instavr - Make your VR apps in minutes
  • +
+

Web Apps

+
    +
  • Bubble - Build a fully functional web app without any code.
  • +
  • Corvid - Build advanced web applications, hassle-free
  • +
  • Boundless - Create dynamic, multisided web apps without coding
  • +
+

Websites

+
    +
  • Sheet2site - Turn your Google Sheets into a website
  • +
  • Universe - Make an awesome website from your phone
  • +
  • Table2Site - Generate websites from your Airtable base
  • +
  • Squarespace - All-in-one platform to build a beautiful online e-commerce
  • +
  • Wix - Free website builder
  • +
  • IM Creator - Free website builder
  • +
  • Weebly - Build a free website or online store
  • +
  • Webnode - Easy & Free website maker
  • +
  • Jimdo - Your website builder
  • +
  • Bookmark - Create a Website with AI
  • +
  • Strikingly - Make a website in minutes
  • +
  • Tilda - Create beautiful websites without any code
  • +
+

Websites, Membership

+
    +
  • Memberspace - Turn your audience into paying members.
  • +
+ +

Awesome-no-code-tools

+

This awesome list links relevant tools for required to make apps/sites/chatbot and any digital tools without code!

+

I know that some of you are thinking "What is awesome without code? on Github???" But you never know when having such a tool might become handy.

+

This list is based on the incredible work done by Louis Veyret & Clément Barberousse and published as a google sheet. I am saving it here as a safekeeping and to maintain it. +Originally published as

+
+

Outils pour créer des sites web, applications mobiles, chatbot sans coder. +Par Louis Veyret & Clément Barberousse +Source : https://docs.google.com/spreadsheets/d/1QRhocTMg1cZAZyWz5vznqg6KdZrzU-b557Il8p0Q7HM/edit#gid=1754454108

+
+

Awesome list

+

Analytics

+ +

Automation

+
    +
  • Zapier - Connect and automate 500+ web apps
  • +
  • Integromat - The glue of the internet
  • +
  • IFTTT - Do more with the services you love
  • +
  • ActionDesk - Build powerful automations with your spreadsheet skills
  • +
  • Microsoft Flow - Automate tasks by integrating your favorite apps
  • +
  • Wayscript - A rapid scripting platform with drag-n-drop interface for Python and Javascript
  • +
  • Tray - Advanced integration platform for connecting up the tools you use every day
  • +
  • Automate Io - Put your business on autopilot. Connect 100+ business apps.
  • +
  • Blockspring - Supercharge your list building, reporting, and landing pages.
  • +
  • Oplim - Custom tasks on your website with zero code
  • +
  • Diagram - Nocode backend API builder with MongoDB and Firestore
  • +
  • Outfunnel - Keep customer data in sync across sales and marketing tools
  • +
+

Automation, Scrapers

+ +

Business Apps

+
    +
  • Betty Blocks - No-code enterprise application development
  • +
  • AppSheet - Intelligent no-code app development platform
  • +
  • Quick Base - Best way to manage data and automate processes, so you can accomplish more
  • +
  • Zoho Creator - Custom apps to run your business.
  • +
  • Calcapp - Build apps with your spreadsheet skills
  • +
+

Chatbots

+
    +
  • Manychat - Create a Messenger bot in minutes
  • +
  • It's Alive - Create a Facebook bot in minutes
  • +
  • Chatfuel - Create chatbots for your audience
  • +
  • Landbot - Lead generation landing page as chatbot
  • +
  • Botsify - Create your own automated chatbot online
  • +
  • Chatamo - Create intelligent voice and chatbot for marketing and sales
  • +
  • Flow XO - Create a chatbot with zero coding skills required
  • +
  • Smooch - Instantly deploy yout bots wherever users are
  • +
  • Rulai - AI Chatbot to deliver Scalable Self Service
  • +
+

Collaboration

+
    +
  • Notion - All-in-one workspace - notes, tasks, wikis & databases
  • +
  • Trello - All-in-one workspace and collaboration for businesses
  • +
+

Collaboration, Internal

+
    +
  • Quip - One place for all your team's work
  • +
+

CRM

+
    +
  • Salesflare - Simple & powerful CRM for small businesses
  • +
  • Pipedrive - CRM Gestion de leads en pipeline
  • +
+

CRM, Marketing

+
    +
  • Hubspot - A full platform of marketing, sales, customer service and CRM software
  • +
+

Customer Support

+
    +
  • Drift - Customer support chatbot
  • +
  • Crisp - Customer support directly in your website
  • +
+

Customer Support, Marketing, CRM

+
    +
  • Intercom - All-in-one customer support
  • +
+

Data, Marketing

+
    +
  • Hotjar - See how your visitors are really using your site
  • +
+

Database

+
    +
  • Airtable - Realtime spreadsheet database hybrid
  • +
  • NocoDB - Free & Open Source Airtable alternative - turns any SQL database into smart spreadsheet
  • +
  • Trevor - Query your live data, without code
  • +
+

Design

+
    +
  • Figma - The first interface design tool with real-time collaboration
  • +
  • unDraw - Free, open-source illustrations for everyone
  • +
+

Design, Websites

+
    +
  • Webflow - All-in-one web design platform
  • +
+

Ecommerce

+
    +
  • Shopify - Build your ecommerce store
  • +
  • Podia - Easily sell memberships, online courses and digital products
  • +
  • Monto - Product reviews for Webflow
  • +
  • Hingeto - Start your own Amazon-style marketplace
  • +
  • Volusion - Ecommerce website store & shopping cart software
  • +
+

Email

+
    +
  • Revue - Editorial newsletters tool for writers and publishers
  • +
  • Sendgrid - Email delivery service
  • +
  • Postcards - Create awesome emails with drag & drop simplicity
  • +
  • BEE - Create beautiful emails, fast.
  • +
  • Stripo - Free email template builder
  • +
  • Substack - Paid newsletters made simple
  • +
  • Mailchimp - Free emailing software
  • +
  • Converkit - Send automated emailing campaigns
  • +
+

Forms

+
    +
  • Typeform - Build beautiful conversational forms
  • +
  • Google Forms - Free forms from Google that connect directly to Google Sheets
  • +
  • Jotform - Online form builder & form creator
  • +
  • Paperform - Beautiful forms that feel like yours
  • +
+

Internal

+
    +
  • Coda - Build docs as powerful as apps
  • +
  • Nuclino - Knowledge base and collaboration
  • +
  • Contractbook - Efficient contract management
  • +
+

Internal, Web Apps

+
    +
  • Retool - Build custom internal tools in minutes
  • +
+

Landing Pages

+
    +
  • Landen - Beautiful Landing Pages. Designed Instantly
  • +
  • Launchaco - Simple landing pages for your startup
  • +
  • Leadpages - Landing page builder & lead gen software
  • +
  • Instapage - Leanding pages, up to 6x more conversions
  • +
  • Unbounce - Landing Pages - More Powerful Customization
  • +
  • Leeflets - Functional landing pages for all kind of things
  • +
  • RIVYT - Websites for Video Creators
  • +
+

Landing Pages, Websites

+
    +
  • Carrd - Build simple, fully responsive one-page sites
  • +
+

Marketing

+
    +
  • Outgrow - Boost your marketing with highly interactive content
  • +
  • Rewardful - Instant Affiliate & Referral Programs for Stripe
  • +
  • Fortvision - Create interactive experiences that lead to higher conversions
  • +
+

Marketplace

+
    +
  • Sharetribe - Create your first marketplace without code
  • +
+

Membership, Websites

+
    +
  • Memberstack - Memberships & gated content for websites
  • +
+

Mobile Apps

+
    +
  • Dropsource - Build and publish native mobile app without coding
  • +
  • Glide - Create mobile apps from Google Sheets
  • +
  • Lightwell - A simple tool for creating native iOS apps on Mac.
  • +
  • Adalo - Create apps as easy as making a slide deck
  • +
  • App Inventor - Create powerful Android apps without code using blocs coding
  • +
  • Thunkable - Create beautiful and powerful mobile apps without code
  • +
+

Mobile Apps, Video Games

+ +

Payment

+
    +
  • Stripe - Payment integration and management
  • +
  • Paypal - Send Money, Online or Set up a Merchant Store
  • +
  • Buy me a coffee - Easy way to support a projet
  • +
+

Payment, Ecommerce

+
    +
  • Gumroad - Sell anything directly to anyone
  • +
+

Payment, Membership

+
    +
  • Patreon - Easy way to contribute to a project
  • +
+

Podcast

+
    +
  • Anchor - The best way to create your podcast
  • +
+

Scrapers

+ +

Video

+
    +
  • Loom - Seamless screen, mic, and camera recording for Chrome
  • +
+

Voice

+
    +
  • Voiceflow - Build voice apps in your browser without coding
  • +
  • Vuix - Design voice apps in minutes
  • +
  • ApitoBot - Create an Alexa Skill or Google Action in minutes
  • +
+

VR

+
    +
  • Instavr - Make your VR apps in minutes
  • +
+

Web Apps

+
    +
  • Bubble - Build a fully functional web app without any code.
  • +
  • Corvid - Build advanced web applications, hassle-free
  • +
  • Boundless - Create dynamic, multisided web apps without coding
  • +
+

Websites

+
    +
  • Sheet2site - Turn your Google Sheets into a website
  • +
  • Universe - Make an awesome website from your phone
  • +
  • Table2Site - Generate websites from your Airtable base
  • +
  • Squarespace - All-in-one platform to build a beautiful online e-commerce
  • +
  • Wix - Free website builder
  • +
  • IM Creator - Free website builder
  • +
  • Weebly - Build a free website or online store
  • +
  • Webnode - Easy & Free website maker
  • +
  • Jimdo - Your website builder
  • +
  • Bookmark - Create a Website with AI
  • +
  • Strikingly - Make a website in minutes
  • +
  • Tilda - Create beautiful websites without any code
  • +
+

Websites, Membership

+
    +
  • Memberspace - Turn your audience into paying members.
  • +
+ +

Awesome-no-code-tools

+

This awesome list links relevant tools for required to make apps/sites/chatbot and any digital tools without code!

+

I know that some of you are thinking "What is awesome without code? on Github???" But you never know when having such a tool might become handy.

+

This list is based on the incredible work done by Louis Veyret & Clément Barberousse and published as a google sheet. I am saving it here as a safekeeping and to maintain it. +Originally published as

+
+

Outils pour créer des sites web, applications mobiles, chatbot sans coder. +Par Louis Veyret & Clément Barberousse +Source : https://docs.google.com/spreadsheets/d/1QRhocTMg1cZAZyWz5vznqg6KdZrzU-b557Il8p0Q7HM/edit#gid=1754454108

+
+

Awesome list

+

Analytics

+ +

Automation

+
    +
  • Zapier - Connect and automate 500+ web apps
  • +
  • Integromat - The glue of the internet
  • +
  • IFTTT - Do more with the services you love
  • +
  • ActionDesk - Build powerful automations with your spreadsheet skills
  • +
  • Microsoft Flow - Automate tasks by integrating your favorite apps
  • +
  • Wayscript - A rapid scripting platform with drag-n-drop interface for Python and Javascript
  • +
  • Tray - Advanced integration platform for connecting up the tools you use every day
  • +
  • Automate Io - Put your business on autopilot. Connect 100+ business apps.
  • +
  • Blockspring - Supercharge your list building, reporting, and landing pages.
  • +
  • Oplim - Custom tasks on your website with zero code
  • +
  • Diagram - Nocode backend API builder with MongoDB and Firestore
  • +
  • Outfunnel - Keep customer data in sync across sales and marketing tools
  • +
+

Automation, Scrapers

+ +

Business Apps

+
    +
  • Betty Blocks - No-code enterprise application development
  • +
  • AppSheet - Intelligent no-code app development platform
  • +
  • Quick Base - Best way to manage data and automate processes, so you can accomplish more
  • +
  • Zoho Creator - Custom apps to run your business.
  • +
  • Calcapp - Build apps with your spreadsheet skills
  • +
+

Chatbots

+
    +
  • Manychat - Create a Messenger bot in minutes
  • +
  • It's Alive - Create a Facebook bot in minutes
  • +
  • Chatfuel - Create chatbots for your audience
  • +
  • Landbot - Lead generation landing page as chatbot
  • +
  • Botsify - Create your own automated chatbot online
  • +
  • Chatamo - Create intelligent voice and chatbot for marketing and sales
  • +
  • Flow XO - Create a chatbot with zero coding skills required
  • +
  • Smooch - Instantly deploy yout bots wherever users are
  • +
  • Rulai - AI Chatbot to deliver Scalable Self Service
  • +
+

Collaboration

+
    +
  • Notion - All-in-one workspace - notes, tasks, wikis & databases
  • +
  • Trello - All-in-one workspace and collaboration for businesses
  • +
+

Collaboration, Internal

+
    +
  • Quip - One place for all your team's work
  • +
+

CRM

+
    +
  • Salesflare - Simple & powerful CRM for small businesses
  • +
  • Pipedrive - CRM Gestion de leads en pipeline
  • +
+

CRM, Marketing

+
    +
  • Hubspot - A full platform of marketing, sales, customer service and CRM software
  • +
+

Customer Support

+
    +
  • Drift - Customer support chatbot
  • +
  • Crisp - Customer support directly in your website
  • +
+

Customer Support, Marketing, CRM

+
    +
  • Intercom - All-in-one customer support
  • +
+

Data, Marketing

+
    +
  • Hotjar - See how your visitors are really using your site
  • +
+

Database

+
    +
  • Airtable - Realtime spreadsheet database hybrid
  • +
  • NocoDB - Free & Open Source Airtable alternative - turns any SQL database into smart spreadsheet
  • +
  • Trevor - Query your live data, without code
  • +
+

Design

+
    +
  • Figma - The first interface design tool with real-time collaboration
  • +
  • unDraw - Free, open-source illustrations for everyone
  • +
+

Design, Websites

+
    +
  • Webflow - All-in-one web design platform
  • +
+

Ecommerce

+
    +
  • Shopify - Build your ecommerce store
  • +
  • Podia - Easily sell memberships, online courses and digital products
  • +
  • Monto - Product reviews for Webflow
  • +
  • Hingeto - Start your own Amazon-style marketplace
  • +
  • Volusion - Ecommerce website store & shopping cart software
  • +
+

Email

+
    +
  • Revue - Editorial newsletters tool for writers and publishers
  • +
  • Sendgrid - Email delivery service
  • +
  • Postcards - Create awesome emails with drag & drop simplicity
  • +
  • BEE - Create beautiful emails, fast.
  • +
  • Stripo - Free email template builder
  • +
  • Substack - Paid newsletters made simple
  • +
  • Mailchimp - Free emailing software
  • +
  • Converkit - Send automated emailing campaigns
  • +
+

Forms

+
    +
  • Typeform - Build beautiful conversational forms
  • +
  • Google Forms - Free forms from Google that connect directly to Google Sheets
  • +
  • Jotform - Online form builder & form creator
  • +
  • Paperform - Beautiful forms that feel like yours
  • +
+

Internal

+
    +
  • Coda - Build docs as powerful as apps
  • +
  • Nuclino - Knowledge base and collaboration
  • +
  • Contractbook - Efficient contract management
  • +
+

Internal, Web Apps

+
    +
  • Retool - Build custom internal tools in minutes
  • +
+

Landing Pages

+
    +
  • Landen - Beautiful Landing Pages. Designed Instantly
  • +
  • Launchaco - Simple landing pages for your startup
  • +
  • Leadpages - Landing page builder & lead gen software
  • +
  • Instapage - Leanding pages, up to 6x more conversions
  • +
  • Unbounce - Landing Pages - More Powerful Customization
  • +
  • Leeflets - Functional landing pages for all kind of things
  • +
  • RIVYT - Websites for Video Creators
  • +
+

Landing Pages, Websites

+
    +
  • Carrd - Build simple, fully responsive one-page sites
  • +
+

Marketing

+
    +
  • Outgrow - Boost your marketing with highly interactive content
  • +
  • Rewardful - Instant Affiliate & Referral Programs for Stripe
  • +
  • Fortvision - Create interactive experiences that lead to higher conversions
  • +
+

Marketplace

+
    +
  • Sharetribe - Create your first marketplace without code
  • +
+

Membership, Websites

+
    +
  • Memberstack - Memberships & gated content for websites
  • +
+

Mobile Apps

+
    +
  • Dropsource - Build and publish native mobile app without coding
  • +
  • Glide - Create mobile apps from Google Sheets
  • +
  • Lightwell - A simple tool for creating native iOS apps on Mac.
  • +
  • Adalo - Create apps as easy as making a slide deck
  • +
  • App Inventor - Create powerful Android apps without code using blocs coding
  • +
  • Thunkable - Create beautiful and powerful mobile apps without code
  • +
+

Mobile Apps, Video Games

+ +

Payment

+
    +
  • Stripe - Payment integration and management
  • +
  • Paypal - Send Money, Online or Set up a Merchant Store
  • +
  • Buy me a coffee - Easy way to support a projet
  • +
+

Payment, Ecommerce

+
    +
  • Gumroad - Sell anything directly to anyone
  • +
+

Payment, Membership

+
    +
  • Patreon - Easy way to contribute to a project
  • +
+

Podcast

+
    +
  • Anchor - The best way to create your podcast
  • +
+

Scrapers

+ +

Video

+
    +
  • Loom - Seamless screen, mic, and camera recording for Chrome
  • +
+

Voice

+
    +
  • Voiceflow - Build voice apps in your browser without coding
  • +
  • Vuix - Design voice apps in minutes
  • +
  • ApitoBot - Create an Alexa Skill or Google Action in minutes
  • +
+

VR

+
    +
  • Instavr - Make your VR apps in minutes
  • +
+

Web Apps

+
    +
  • Bubble - Build a fully functional web app without any code.
  • +
  • Corvid - Build advanced web applications, hassle-free
  • +
  • Boundless - Create dynamic, multisided web apps without coding
  • +
+

Websites

+
    +
  • Sheet2site - Turn your Google Sheets into a website
  • +
  • Universe - Make an awesome website from your phone
  • +
  • Table2Site - Generate websites from your Airtable base
  • +
  • Squarespace - All-in-one platform to build a beautiful online e-commerce
  • +
  • Wix - Free website builder
  • +
  • IM Creator - Free website builder
  • +
  • Weebly - Build a free website or online store
  • +
  • Webnode - Easy & Free website maker
  • +
  • Jimdo - Your website builder
  • +
  • Bookmark - Create a Website with AI
  • +
  • Strikingly - Make a website in minutes
  • +
  • Tilda - Create beautiful websites without any code
  • +
+

Websites, Membership

+
    +
  • Memberspace - Turn your audience into paying members.
  • +
+ +

Awesome-no-code-tools

+

This awesome list links relevant tools for required to make apps/sites/chatbot and any digital tools without code!

+

I know that some of you are thinking "What is awesome without code? on Github???" But you never know when having such a tool might become handy.

+

This list is based on the incredible work done by Louis Veyret & Clément Barberousse and published as a google sheet. I am saving it here as a safekeeping and to maintain it. +Originally published as

+
+

Outils pour créer des sites web, applications mobiles, chatbot sans coder. +Par Louis Veyret & Clément Barberousse +Source : https://docs.google.com/spreadsheets/d/1QRhocTMg1cZAZyWz5vznqg6KdZrzU-b557Il8p0Q7HM/edit#gid=1754454108

+
+

Awesome list

+

Analytics

+ +

Automation

+
    +
  • Zapier - Connect and automate 500+ web apps
  • +
  • Integromat - The glue of the internet
  • +
  • IFTTT - Do more with the services you love
  • +
  • ActionDesk - Build powerful automations with your spreadsheet skills
  • +
  • Microsoft Flow - Automate tasks by integrating your favorite apps
  • +
  • Wayscript - A rapid scripting platform with drag-n-drop interface for Python and Javascript
  • +
  • Tray - Advanced integration platform for connecting up the tools you use every day
  • +
  • Automate Io - Put your business on autopilot. Connect 100+ business apps.
  • +
  • Blockspring - Supercharge your list building, reporting, and landing pages.
  • +
  • Oplim - Custom tasks on your website with zero code
  • +
  • Diagram - Nocode backend API builder with MongoDB and Firestore
  • +
  • Outfunnel - Keep customer data in sync across sales and marketing tools
  • +
+

Automation, Scrapers

+ +

Business Apps

+
    +
  • Betty Blocks - No-code enterprise application development
  • +
  • AppSheet - Intelligent no-code app development platform
  • +
  • Quick Base - Best way to manage data and automate processes, so you can accomplish more
  • +
  • Zoho Creator - Custom apps to run your business.
  • +
  • Calcapp - Build apps with your spreadsheet skills
  • +
+

Chatbots

+
    +
  • Manychat - Create a Messenger bot in minutes
  • +
  • It's Alive - Create a Facebook bot in minutes
  • +
  • Chatfuel - Create chatbots for your audience
  • +
  • Landbot - Lead generation landing page as chatbot
  • +
  • Botsify - Create your own automated chatbot online
  • +
  • Chatamo - Create intelligent voice and chatbot for marketing and sales
  • +
  • Flow XO - Create a chatbot with zero coding skills required
  • +
  • Smooch - Instantly deploy yout bots wherever users are
  • +
  • Rulai - AI Chatbot to deliver Scalable Self Service
  • +
+

Collaboration

+
    +
  • Notion - All-in-one workspace - notes, tasks, wikis & databases
  • +
  • Trello - All-in-one workspace and collaboration for businesses
  • +
+

Collaboration, Internal

+
    +
  • Quip - One place for all your team's work
  • +
+

CRM

+
    +
  • Salesflare - Simple & powerful CRM for small businesses
  • +
  • Pipedrive - CRM Gestion de leads en pipeline
  • +
+

CRM, Marketing

+
    +
  • Hubspot - A full platform of marketing, sales, customer service and CRM software
  • +
+

Customer Support

+
    +
  • Drift - Customer support chatbot
  • +
  • Crisp - Customer support directly in your website
  • +
+

Customer Support, Marketing, CRM

+
    +
  • Intercom - All-in-one customer support
  • +
+

Data, Marketing

+
    +
  • Hotjar - See how your visitors are really using your site
  • +
+

Database

+
    +
  • Airtable - Realtime spreadsheet database hybrid
  • +
  • NocoDB - Free & Open Source Airtable alternative - turns any SQL database into smart spreadsheet
  • +
  • Trevor - Query your live data, without code
  • +
+

Design

+
    +
  • Figma - The first interface design tool with real-time collaboration
  • +
  • unDraw - Free, open-source illustrations for everyone
  • +
+

Design, Websites

+
    +
  • Webflow - All-in-one web design platform
  • +
+

Ecommerce

+
    +
  • Shopify - Build your ecommerce store
  • +
  • Podia - Easily sell memberships, online courses and digital products
  • +
  • Monto - Product reviews for Webflow
  • +
  • Hingeto - Start your own Amazon-style marketplace
  • +
  • Volusion - Ecommerce website store & shopping cart software
  • +
+

Email

+
    +
  • Revue - Editorial newsletters tool for writers and publishers
  • +
  • Sendgrid - Email delivery service
  • +
  • Postcards - Create awesome emails with drag & drop simplicity
  • +
  • BEE - Create beautiful emails, fast.
  • +
  • Stripo - Free email template builder
  • +
  • Substack - Paid newsletters made simple
  • +
  • Mailchimp - Free emailing software
  • +
  • Converkit - Send automated emailing campaigns
  • +
+

Forms

+
    +
  • Typeform - Build beautiful conversational forms
  • +
  • Google Forms - Free forms from Google that connect directly to Google Sheets
  • +
  • Jotform - Online form builder & form creator
  • +
  • Paperform - Beautiful forms that feel like yours
  • +
+

Internal

+
    +
  • Coda - Build docs as powerful as apps
  • +
  • Nuclino - Knowledge base and collaboration
  • +
  • Contractbook - Efficient contract management
  • +
+

Internal, Web Apps

+
    +
  • Retool - Build custom internal tools in minutes
  • +
+

Landing Pages

+
    +
  • Landen - Beautiful Landing Pages. Designed Instantly
  • +
  • Launchaco - Simple landing pages for your startup
  • +
  • Leadpages - Landing page builder & lead gen software
  • +
  • Instapage - Leanding pages, up to 6x more conversions
  • +
  • Unbounce - Landing Pages - More Powerful Customization
  • +
  • Leeflets - Functional landing pages for all kind of things
  • +
  • RIVYT - Websites for Video Creators
  • +
+

Landing Pages, Websites

+
    +
  • Carrd - Build simple, fully responsive one-page sites
  • +
+

Marketing

+
    +
  • Outgrow - Boost your marketing with highly interactive content
  • +
  • Rewardful - Instant Affiliate & Referral Programs for Stripe
  • +
  • Fortvision - Create interactive experiences that lead to higher conversions
  • +
+

Marketplace

+
    +
  • Sharetribe - Create your first marketplace without code
  • +
+

Membership, Websites

+
    +
  • Memberstack - Memberships & gated content for websites
  • +
+

Mobile Apps

+
    +
  • Dropsource - Build and publish native mobile app without coding
  • +
  • Glide - Create mobile apps from Google Sheets
  • +
  • Lightwell - A simple tool for creating native iOS apps on Mac.
  • +
  • Adalo - Create apps as easy as making a slide deck
  • +
  • App Inventor - Create powerful Android apps without code using blocs coding
  • +
  • Thunkable - Create beautiful and powerful mobile apps without code
  • +
+

Mobile Apps, Video Games

+ +

Payment

+
    +
  • Stripe - Payment integration and management
  • +
  • Paypal - Send Money, Online or Set up a Merchant Store
  • +
  • Buy me a coffee - Easy way to support a projet
  • +
+

Payment, Ecommerce

+
    +
  • Gumroad - Sell anything directly to anyone
  • +
+

Payment, Membership

+
    +
  • Patreon - Easy way to contribute to a project
  • +
+

Podcast

+
    +
  • Anchor - The best way to create your podcast
  • +
+

Scrapers

+ +

Video

+
    +
  • Loom - Seamless screen, mic, and camera recording for Chrome
  • +
+

Voice

+
    +
  • Voiceflow - Build voice apps in your browser without coding
  • +
  • Vuix - Design voice apps in minutes
  • +
  • ApitoBot - Create an Alexa Skill or Google Action in minutes
  • +
+

VR

+
    +
  • Instavr - Make your VR apps in minutes
  • +
+

Web Apps

+
    +
  • Bubble - Build a fully functional web app without any code.
  • +
  • Corvid - Build advanced web applications, hassle-free
  • +
  • Boundless - Create dynamic, multisided web apps without coding
  • +
+

Websites

+
    +
  • Sheet2site - Turn your Google Sheets into a website
  • +
  • Universe - Make an awesome website from your phone
  • +
  • Table2Site - Generate websites from your Airtable base
  • +
  • Squarespace - All-in-one platform to build a beautiful online e-commerce
  • +
  • Wix - Free website builder
  • +
  • IM Creator - Free website builder
  • +
  • Weebly - Build a free website or online store
  • +
  • Webnode - Easy & Free website maker
  • +
  • Jimdo - Your website builder
  • +
  • Bookmark - Create a Website with AI
  • +
  • Strikingly - Make a website in minutes
  • +
  • Tilda - Create beautiful websites without any code
  • +
+

Websites, Membership

+
    +
  • Memberspace - Turn your audience into paying members.
  • +
+ +

Awesome-no-code-tools

+

This awesome list links relevant tools for required to make apps/sites/chatbot and any digital tools without code!

+

I know that some of you are thinking "What is awesome without code? on Github???" But you never know when having such a tool might become handy.

+

This list is based on the incredible work done by Louis Veyret & Clément Barberousse and published as a google sheet. I am saving it here as a safekeeping and to maintain it. +Originally published as

+
+

Outils pour créer des sites web, applications mobiles, chatbot sans coder. +Par Louis Veyret & Clément Barberousse +Source : https://docs.google.com/spreadsheets/d/1QRhocTMg1cZAZyWz5vznqg6KdZrzU-b557Il8p0Q7HM/edit#gid=1754454108

+
+

Awesome list

+

Analytics

+ +

Automation

+
    +
  • Zapier - Connect and automate 500+ web apps
  • +
  • Integromat - The glue of the internet
  • +
  • IFTTT - Do more with the services you love
  • +
  • ActionDesk - Build powerful automations with your spreadsheet skills
  • +
  • Microsoft Flow - Automate tasks by integrating your favorite apps
  • +
  • Wayscript - A rapid scripting platform with drag-n-drop interface for Python and Javascript
  • +
  • Tray - Advanced integration platform for connecting up the tools you use every day
  • +
  • Automate Io - Put your business on autopilot. Connect 100+ business apps.
  • +
  • Blockspring - Supercharge your list building, reporting, and landing pages.
  • +
  • Oplim - Custom tasks on your website with zero code
  • +
  • Diagram - Nocode backend API builder with MongoDB and Firestore
  • +
  • Outfunnel - Keep customer data in sync across sales and marketing tools
  • +
+

Automation, Scrapers

+ +

Business Apps

+
    +
  • Betty Blocks - No-code enterprise application development
  • +
  • AppSheet - Intelligent no-code app development platform
  • +
  • Quick Base - Best way to manage data and automate processes, so you can accomplish more
  • +
  • Zoho Creator - Custom apps to run your business.
  • +
  • Calcapp - Build apps with your spreadsheet skills
  • +
+

Chatbots

+
    +
  • Manychat - Create a Messenger bot in minutes
  • +
  • It's Alive - Create a Facebook bot in minutes
  • +
  • Chatfuel - Create chatbots for your audience
  • +
  • Landbot - Lead generation landing page as chatbot
  • +
  • Botsify - Create your own automated chatbot online
  • +
  • Chatamo - Create intelligent voice and chatbot for marketing and sales
  • +
  • Flow XO - Create a chatbot with zero coding skills required
  • +
  • Smooch - Instantly deploy yout bots wherever users are
  • +
  • Rulai - AI Chatbot to deliver Scalable Self Service
  • +
+

Collaboration

+
    +
  • Notion - All-in-one workspace - notes, tasks, wikis & databases
  • +
  • Trello - All-in-one workspace and collaboration for businesses
  • +
+

Collaboration, Internal

+
    +
  • Quip - One place for all your team's work
  • +
+

CRM

+
    +
  • Salesflare - Simple & powerful CRM for small businesses
  • +
  • Pipedrive - CRM Gestion de leads en pipeline
  • +
+

CRM, Marketing

+
    +
  • Hubspot - A full platform of marketing, sales, customer service and CRM software
  • +
+

Customer Support

+
    +
  • Drift - Customer support chatbot
  • +
  • Crisp - Customer support directly in your website
  • +
+

Customer Support, Marketing, CRM

+
    +
  • Intercom - All-in-one customer support
  • +
+

Data, Marketing

+
    +
  • Hotjar - See how your visitors are really using your site
  • +
+

Database

+
    +
  • Airtable - Realtime spreadsheet database hybrid
  • +
  • NocoDB - Free & Open Source Airtable alternative - turns any SQL database into smart spreadsheet
  • +
  • Trevor - Query your live data, without code
  • +
+

Design

+
    +
  • Figma - The first interface design tool with real-time collaboration
  • +
  • unDraw - Free, open-source illustrations for everyone
  • +
+

Design, Websites

+
    +
  • Webflow - All-in-one web design platform
  • +
+

Ecommerce

+
    +
  • Shopify - Build your ecommerce store
  • +
  • Podia - Easily sell memberships, online courses and digital products
  • +
  • Monto - Product reviews for Webflow
  • +
  • Hingeto - Start your own Amazon-style marketplace
  • +
  • Volusion - Ecommerce website store & shopping cart software
  • +
+

Email

+
    +
  • Revue - Editorial newsletters tool for writers and publishers
  • +
  • Sendgrid - Email delivery service
  • +
  • Postcards - Create awesome emails with drag & drop simplicity
  • +
  • BEE - Create beautiful emails, fast.
  • +
  • Stripo - Free email template builder
  • +
  • Substack - Paid newsletters made simple
  • +
  • Mailchimp - Free emailing software
  • +
  • Converkit - Send automated emailing campaigns
  • +
+

Forms

+
    +
  • Typeform - Build beautiful conversational forms
  • +
  • Google Forms - Free forms from Google that connect directly to Google Sheets
  • +
  • Jotform - Online form builder & form creator
  • +
  • Paperform - Beautiful forms that feel like yours
  • +
+

Internal

+
    +
  • Coda - Build docs as powerful as apps
  • +
  • Nuclino - Knowledge base and collaboration
  • +
  • Contractbook - Efficient contract management
  • +
+

Internal, Web Apps

+
    +
  • Retool - Build custom internal tools in minutes
  • +
+

Landing Pages

+
    +
  • Landen - Beautiful Landing Pages. Designed Instantly
  • +
  • Launchaco - Simple landing pages for your startup
  • +
  • Leadpages - Landing page builder & lead gen software
  • +
  • Instapage - Leanding pages, up to 6x more conversions
  • +
  • Unbounce - Landing Pages - More Powerful Customization
  • +
  • Leeflets - Functional landing pages for all kind of things
  • +
  • RIVYT - Websites for Video Creators
  • +
+

Landing Pages, Websites

+
    +
  • Carrd - Build simple, fully responsive one-page sites
  • +
+

Marketing

+
    +
  • Outgrow - Boost your marketing with highly interactive content
  • +
  • Rewardful - Instant Affiliate & Referral Programs for Stripe
  • +
  • Fortvision - Create interactive experiences that lead to higher conversions
  • +
+

Marketplace

+
    +
  • Sharetribe - Create your first marketplace without code
  • +
+

Membership, Websites

+
    +
  • Memberstack - Memberships & gated content for websites
  • +
+

Mobile Apps

+
    +
  • Dropsource - Build and publish native mobile app without coding
  • +
  • Glide - Create mobile apps from Google Sheets
  • +
  • Lightwell - A simple tool for creating native iOS apps on Mac.
  • +
  • Adalo - Create apps as easy as making a slide deck
  • +
  • App Inventor - Create powerful Android apps without code using blocs coding
  • +
  • Thunkable - Create beautiful and powerful mobile apps without code
  • +
+

Mobile Apps, Video Games

+ +

Payment

+
    +
  • Stripe - Payment integration and management
  • +
  • Paypal - Send Money, Online or Set up a Merchant Store
  • +
  • Buy me a coffee - Easy way to support a projet
  • +
+

Payment, Ecommerce

+
    +
  • Gumroad - Sell anything directly to anyone
  • +
+

Payment, Membership

+
    +
  • Patreon - Easy way to contribute to a project
  • +
+

Podcast

+
    +
  • Anchor - The best way to create your podcast
  • +
+

Scrapers

+ +

Video

+
    +
  • Loom - Seamless screen, mic, and camera recording for Chrome
  • +
+

Voice

+
    +
  • Voiceflow - Build voice apps in your browser without coding
  • +
  • Vuix - Design voice apps in minutes
  • +
  • ApitoBot - Create an Alexa Skill or Google Action in minutes
  • +
+

VR

+
    +
  • Instavr - Make your VR apps in minutes
  • +
+

Web Apps

+
    +
  • Bubble - Build a fully functional web app without any code.
  • +
  • Corvid - Build advanced web applications, hassle-free
  • +
  • Boundless - Create dynamic, multisided web apps without coding
  • +
+

Websites

+
    +
  • Sheet2site - Turn your Google Sheets into a website
  • +
  • Universe - Make an awesome website from your phone
  • +
  • Table2Site - Generate websites from your Airtable base
  • +
  • Squarespace - All-in-one platform to build a beautiful online e-commerce
  • +
  • Wix - Free website builder
  • +
  • IM Creator - Free website builder
  • +
  • Weebly - Build a free website or online store
  • +
  • Webnode - Easy & Free website maker
  • +
  • Jimdo - Your website builder
  • +
  • Bookmark - Create a Website with AI
  • +
  • Strikingly - Make a website in minutes
  • +
  • Tilda - Create beautiful websites without any code
  • +
+

Websites, Membership

+
    +
  • Memberspace - Turn your audience into paying members.
  • +
+ +

Awesome-no-code-tools

+

This awesome list links relevant tools for required to make apps/sites/chatbot and any digital tools without code!

+

I know that some of you are thinking "What is awesome without code? on Github???" But you never know when having such a tool might become handy.

+

This list is based on the incredible work done by Louis Veyret & Clément Barberousse and published as a google sheet. I am saving it here as a safekeeping and to maintain it. +Originally published as

+
+

Outils pour créer des sites web, applications mobiles, chatbot sans coder. +Par Louis Veyret & Clément Barberousse +Source : https://docs.google.com/spreadsheets/d/1QRhocTMg1cZAZyWz5vznqg6KdZrzU-b557Il8p0Q7HM/edit#gid=1754454108

+
+

Awesome list

+

Analytics

+ +

Automation

+
    +
  • Zapier - Connect and automate 500+ web apps
  • +
  • Integromat - The glue of the internet
  • +
  • IFTTT - Do more with the services you love
  • +
  • ActionDesk - Build powerful automations with your spreadsheet skills
  • +
  • Microsoft Flow - Automate tasks by integrating your favorite apps
  • +
  • Wayscript - A rapid scripting platform with drag-n-drop interface for Python and Javascript
  • +
  • Tray - Advanced integration platform for connecting up the tools you use every day
  • +
  • Automate Io - Put your business on autopilot. Connect 100+ business apps.
  • +
  • Blockspring - Supercharge your list building, reporting, and landing pages.
  • +
  • Oplim - Custom tasks on your website with zero code
  • +
  • Diagram - Nocode backend API builder with MongoDB and Firestore
  • +
  • Outfunnel - Keep customer data in sync across sales and marketing tools
  • +
+

Automation, Scrapers

+ +

Business Apps

+
    +
  • Betty Blocks - No-code enterprise application development
  • +
  • AppSheet - Intelligent no-code app development platform
  • +
  • Quick Base - Best way to manage data and automate processes, so you can accomplish more
  • +
  • Zoho Creator - Custom apps to run your business.
  • +
  • Calcapp - Build apps with your spreadsheet skills
  • +
+

Chatbots

+
    +
  • Manychat - Create a Messenger bot in minutes
  • +
  • It's Alive - Create a Facebook bot in minutes
  • +
  • Chatfuel - Create chatbots for your audience
  • +
  • Landbot - Lead generation landing page as chatbot
  • +
  • Botsify - Create your own automated chatbot online
  • +
  • Chatamo - Create intelligent voice and chatbot for marketing and sales
  • +
  • Flow XO - Create a chatbot with zero coding skills required
  • +
  • Smooch - Instantly deploy yout bots wherever users are
  • +
  • Rulai - AI Chatbot to deliver Scalable Self Service
  • +
+

Collaboration

+
    +
  • Notion - All-in-one workspace - notes, tasks, wikis & databases
  • +
  • Trello - All-in-one workspace and collaboration for businesses
  • +
+

Collaboration, Internal

+
    +
  • Quip - One place for all your team's work
  • +
+

CRM

+
    +
  • Salesflare - Simple & powerful CRM for small businesses
  • +
  • Pipedrive - CRM Gestion de leads en pipeline
  • +
+

CRM, Marketing

+
    +
  • Hubspot - A full platform of marketing, sales, customer service and CRM software
  • +
+

Customer Support

+
    +
  • Drift - Customer support chatbot
  • +
  • Crisp - Customer support directly in your website
  • +
+

Customer Support, Marketing, CRM

+
    +
  • Intercom - All-in-one customer support
  • +
+

Data, Marketing

+
    +
  • Hotjar - See how your visitors are really using your site
  • +
+

Database

+
    +
  • Airtable - Realtime spreadsheet database hybrid
  • +
  • NocoDB - Free & Open Source Airtable alternative - turns any SQL database into smart spreadsheet
  • +
  • Trevor - Query your live data, without code
  • +
+

Design

+
    +
  • Figma - The first interface design tool with real-time collaboration
  • +
  • unDraw - Free, open-source illustrations for everyone
  • +
+

Design, Websites

+
    +
  • Webflow - All-in-one web design platform
  • +
+

Ecommerce

+
    +
  • Shopify - Build your ecommerce store
  • +
  • Podia - Easily sell memberships, online courses and digital products
  • +
  • Monto - Product reviews for Webflow
  • +
  • Hingeto - Start your own Amazon-style marketplace
  • +
  • Volusion - Ecommerce website store & shopping cart software
  • +
+

Email

+
    +
  • Revue - Editorial newsletters tool for writers and publishers
  • +
  • Sendgrid - Email delivery service
  • +
  • Postcards - Create awesome emails with drag & drop simplicity
  • +
  • BEE - Create beautiful emails, fast.
  • +
  • Stripo - Free email template builder
  • +
  • Substack - Paid newsletters made simple
  • +
  • Mailchimp - Free emailing software
  • +
  • Converkit - Send automated emailing campaigns
  • +
+

Forms

+
    +
  • Typeform - Build beautiful conversational forms
  • +
  • Google Forms - Free forms from Google that connect directly to Google Sheets
  • +
  • Jotform - Online form builder & form creator
  • +
  • Paperform - Beautiful forms that feel like yours
  • +
+

Internal

+
    +
  • Coda - Build docs as powerful as apps
  • +
  • Nuclino - Knowledge base and collaboration
  • +
  • Contractbook - Efficient contract management
  • +
+

Internal, Web Apps

+
    +
  • Retool - Build custom internal tools in minutes
  • +
+

Landing Pages

+
    +
  • Landen - Beautiful Landing Pages. Designed Instantly
  • +
  • Launchaco - Simple landing pages for your startup
  • +
  • Leadpages - Landing page builder & lead gen software
  • +
  • Instapage - Leanding pages, up to 6x more conversions
  • +
  • Unbounce - Landing Pages - More Powerful Customization
  • +
  • Leeflets - Functional landing pages for all kind of things
  • +
  • RIVYT - Websites for Video Creators
  • +
+

Landing Pages, Websites

+
    +
  • Carrd - Build simple, fully responsive one-page sites
  • +
+

Marketing

+
    +
  • Outgrow - Boost your marketing with highly interactive content
  • +
  • Rewardful - Instant Affiliate & Referral Programs for Stripe
  • +
  • Fortvision - Create interactive experiences that lead to higher conversions
  • +
+

Marketplace

+
    +
  • Sharetribe - Create your first marketplace without code
  • +
+

Membership, Websites

+
    +
  • Memberstack - Memberships & gated content for websites
  • +
+

Mobile Apps

+
    +
  • Dropsource - Build and publish native mobile app without coding
  • +
  • Glide - Create mobile apps from Google Sheets
  • +
  • Lightwell - A simple tool for creating native iOS apps on Mac.
  • +
  • Adalo - Create apps as easy as making a slide deck
  • +
  • App Inventor - Create powerful Android apps without code using blocs coding
  • +
  • Thunkable - Create beautiful and powerful mobile apps without code
  • +
+

Mobile Apps, Video Games

+ +

Payment

+
    +
  • Stripe - Payment integration and management
  • +
  • Paypal - Send Money, Online or Set up a Merchant Store
  • +
  • Buy me a coffee - Easy way to support a projet
  • +
+

Payment, Ecommerce

+
    +
  • Gumroad - Sell anything directly to anyone
  • +
+

Payment, Membership

+
    +
  • Patreon - Easy way to contribute to a project
  • +
+

Podcast

+
    +
  • Anchor - The best way to create your podcast
  • +
+

Scrapers

+ +

Video

+
    +
  • Loom - Seamless screen, mic, and camera recording for Chrome
  • +
+

Voice

+
    +
  • Voiceflow - Build voice apps in your browser without coding
  • +
  • Vuix - Design voice apps in minutes
  • +
  • ApitoBot - Create an Alexa Skill or Google Action in minutes
  • +
+

VR

+
    +
  • Instavr - Make your VR apps in minutes
  • +
+

Web Apps

+
    +
  • Bubble - Build a fully functional web app without any code.
  • +
  • Corvid - Build advanced web applications, hassle-free
  • +
  • Boundless - Create dynamic, multisided web apps without coding
  • +
+

Websites

+
    +
  • Sheet2site - Turn your Google Sheets into a website
  • +
  • Universe - Make an awesome website from your phone
  • +
  • Table2Site - Generate websites from your Airtable base
  • +
  • Squarespace - All-in-one platform to build a beautiful online e-commerce
  • +
  • Wix - Free website builder
  • +
  • IM Creator - Free website builder
  • +
  • Weebly - Build a free website or online store
  • +
  • Webnode - Easy & Free website maker
  • +
  • Jimdo - Your website builder
  • +
  • Bookmark - Create a Website with AI
  • +
  • Strikingly - Make a website in minutes
  • +
  • Tilda - Create beautiful websites without any code
  • +
+

Websites, Membership

+
    +
  • Memberspace - Turn your audience into paying members.
  • +
+ +

Awesome-no-code-tools

+

This awesome list links relevant tools for required to make apps/sites/chatbot and any digital tools without code!

+

I know that some of you are thinking "What is awesome without code? on Github???" But you never know when having such a tool might become handy.

+

This list is based on the incredible work done by Louis Veyret & Clément Barberousse and published as a google sheet. I am saving it here as a safekeeping and to maintain it. +Originally published as

+
+

Outils pour créer des sites web, applications mobiles, chatbot sans coder. +Par Louis Veyret & Clément Barberousse +Source : https://docs.google.com/spreadsheets/d/1QRhocTMg1cZAZyWz5vznqg6KdZrzU-b557Il8p0Q7HM/edit#gid=1754454108

+
+

Awesome list

+

Analytics

+ +

Automation

+
    +
  • Zapier - Connect and automate 500+ web apps
  • +
  • Integromat - The glue of the internet
  • +
  • IFTTT - Do more with the services you love
  • +
  • ActionDesk - Build powerful automations with your spreadsheet skills
  • +
  • Microsoft Flow - Automate tasks by integrating your favorite apps
  • +
  • Wayscript - A rapid scripting platform with drag-n-drop interface for Python and Javascript
  • +
  • Tray - Advanced integration platform for connecting up the tools you use every day
  • +
  • Automate Io - Put your business on autopilot. Connect 100+ business apps.
  • +
  • Blockspring - Supercharge your list building, reporting, and landing pages.
  • +
  • Oplim - Custom tasks on your website with zero code
  • +
  • Diagram - Nocode backend API builder with MongoDB and Firestore
  • +
  • Outfunnel - Keep customer data in sync across sales and marketing tools
  • +
+

Automation, Scrapers

+ +

Business Apps

+
    +
  • Betty Blocks - No-code enterprise application development
  • +
  • AppSheet - Intelligent no-code app development platform
  • +
  • Quick Base - Best way to manage data and automate processes, so you can accomplish more
  • +
  • Zoho Creator - Custom apps to run your business.
  • +
  • Calcapp - Build apps with your spreadsheet skills
  • +
+

Chatbots

+
    +
  • Manychat - Create a Messenger bot in minutes
  • +
  • It's Alive - Create a Facebook bot in minutes
  • +
  • Chatfuel - Create chatbots for your audience
  • +
  • Landbot - Lead generation landing page as chatbot
  • +
  • Botsify - Create your own automated chatbot online
  • +
  • Chatamo - Create intelligent voice and chatbot for marketing and sales
  • +
  • Flow XO - Create a chatbot with zero coding skills required
  • +
  • Smooch - Instantly deploy yout bots wherever users are
  • +
  • Rulai - AI Chatbot to deliver Scalable Self Service
  • +
+

Collaboration

+
    +
  • Notion - All-in-one workspace - notes, tasks, wikis & databases
  • +
  • Trello - All-in-one workspace and collaboration for businesses
  • +
+

Collaboration, Internal

+
    +
  • Quip - One place for all your team's work
  • +
+

CRM

+
    +
  • Salesflare - Simple & powerful CRM for small businesses
  • +
  • Pipedrive - CRM Gestion de leads en pipeline
  • +
+

CRM, Marketing

+
    +
  • Hubspot - A full platform of marketing, sales, customer service and CRM software
  • +
+

Customer Support

+
    +
  • Drift - Customer support chatbot
  • +
  • Crisp - Customer support directly in your website
  • +
+

Customer Support, Marketing, CRM

+
    +
  • Intercom - All-in-one customer support
  • +
+

Data, Marketing

+
    +
  • Hotjar - See how your visitors are really using your site
  • +
+

Database

+
    +
  • Airtable - Realtime spreadsheet database hybrid
  • +
  • NocoDB - Free & Open Source Airtable alternative - turns any SQL database into smart spreadsheet
  • +
  • Trevor - Query your live data, without code
  • +
+

Design

+
    +
  • Figma - The first interface design tool with real-time collaboration
  • +
  • unDraw - Free, open-source illustrations for everyone
  • +
+

Design, Websites

+
    +
  • Webflow - All-in-one web design platform
  • +
+

Ecommerce

+
    +
  • Shopify - Build your ecommerce store
  • +
  • Podia - Easily sell memberships, online courses and digital products
  • +
  • Monto - Product reviews for Webflow
  • +
  • Hingeto - Start your own Amazon-style marketplace
  • +
  • Volusion - Ecommerce website store & shopping cart software
  • +
+

Email

+
    +
  • Revue - Editorial newsletters tool for writers and publishers
  • +
  • Sendgrid - Email delivery service
  • +
  • Postcards - Create awesome emails with drag & drop simplicity
  • +
  • BEE - Create beautiful emails, fast.
  • +
  • Stripo - Free email template builder
  • +
  • Substack - Paid newsletters made simple
  • +
  • Mailchimp - Free emailing software
  • +
  • Converkit - Send automated emailing campaigns
  • +
+

Forms

+
    +
  • Typeform - Build beautiful conversational forms
  • +
  • Google Forms - Free forms from Google that connect directly to Google Sheets
  • +
  • Jotform - Online form builder & form creator
  • +
  • Paperform - Beautiful forms that feel like yours
  • +
+

Internal

+
    +
  • Coda - Build docs as powerful as apps
  • +
  • Nuclino - Knowledge base and collaboration
  • +
  • Contractbook - Efficient contract management
  • +
+

Internal, Web Apps

+
    +
  • Retool - Build custom internal tools in minutes
  • +
+

Landing Pages

+
    +
  • Landen - Beautiful Landing Pages. Designed Instantly
  • +
  • Launchaco - Simple landing pages for your startup
  • +
  • Leadpages - Landing page builder & lead gen software
  • +
  • Instapage - Leanding pages, up to 6x more conversions
  • +
  • Unbounce - Landing Pages - More Powerful Customization
  • +
  • Leeflets - Functional landing pages for all kind of things
  • +
  • RIVYT - Websites for Video Creators
  • +
+

Landing Pages, Websites

+
    +
  • Carrd - Build simple, fully responsive one-page sites
  • +
+

Marketing

+
    +
  • Outgrow - Boost your marketing with highly interactive content
  • +
  • Rewardful - Instant Affiliate & Referral Programs for Stripe
  • +
  • Fortvision - Create interactive experiences that lead to higher conversions
  • +
+

Marketplace

+
    +
  • Sharetribe - Create your first marketplace without code
  • +
+

Membership, Websites

+
    +
  • Memberstack - Memberships & gated content for websites
  • +
+

Mobile Apps

+
    +
  • Dropsource - Build and publish native mobile app without coding
  • +
  • Glide - Create mobile apps from Google Sheets
  • +
  • Lightwell - A simple tool for creating native iOS apps on Mac.
  • +
  • Adalo - Create apps as easy as making a slide deck
  • +
  • App Inventor - Create powerful Android apps without code using blocs coding
  • +
  • Thunkable - Create beautiful and powerful mobile apps without code
  • +
+

Mobile Apps, Video Games

+ +

Payment

+
    +
  • Stripe - Payment integration and management
  • +
  • Paypal - Send Money, Online or Set up a Merchant Store
  • +
  • Buy me a coffee - Easy way to support a projet
  • +
+

Payment, Ecommerce

+
    +
  • Gumroad - Sell anything directly to anyone
  • +
+

Payment, Membership

+
    +
  • Patreon - Easy way to contribute to a project
  • +
+

Podcast

+
    +
  • Anchor - The best way to create your podcast
  • +
+

Scrapers

+ +

Video

+
    +
  • Loom - Seamless screen, mic, and camera recording for Chrome
  • +
+

Voice

+
    +
  • Voiceflow - Build voice apps in your browser without coding
  • +
  • Vuix - Design voice apps in minutes
  • +
  • ApitoBot - Create an Alexa Skill or Google Action in minutes
  • +
+

VR

+
    +
  • Instavr - Make your VR apps in minutes
  • +
+

Web Apps

+
    +
  • Bubble - Build a fully functional web app without any code.
  • +
  • Corvid - Build advanced web applications, hassle-free
  • +
  • Boundless - Create dynamic, multisided web apps without coding
  • +
+

Websites

+
    +
  • Sheet2site - Turn your Google Sheets into a website
  • +
  • Universe - Make an awesome website from your phone
  • +
  • Table2Site - Generate websites from your Airtable base
  • +
  • Squarespace - All-in-one platform to build a beautiful online e-commerce
  • +
  • Wix - Free website builder
  • +
  • IM Creator - Free website builder
  • +
  • Weebly - Build a free website or online store
  • +
  • Webnode - Easy & Free website maker
  • +
  • Jimdo - Your website builder
  • +
  • Bookmark - Create a Website with AI
  • +
  • Strikingly - Make a website in minutes
  • +
  • Tilda - Create beautiful websites without any code
  • +
+

Websites, Membership

+
    +
  • Memberspace - Turn your audience into paying members.
  • +
+ +

Awesome-no-code-tools

+

This awesome list links relevant tools for required to make apps/sites/chatbot and any digital tools without code!

+

I know that some of you are thinking "What is awesome without code? on Github???" But you never know when having such a tool might become handy.

+

This list is based on the incredible work done by Louis Veyret & Clément Barberousse and published as a google sheet. I am saving it here as a safekeeping and to maintain it. +Originally published as

+
+

Outils pour créer des sites web, applications mobiles, chatbot sans coder. +Par Louis Veyret & Clément Barberousse +Source : https://docs.google.com/spreadsheets/d/1QRhocTMg1cZAZyWz5vznqg6KdZrzU-b557Il8p0Q7HM/edit#gid=1754454108

+
+

Awesome list

+

Analytics

+ +

Automation

+
    +
  • Zapier - Connect and automate 500+ web apps
  • +
  • Integromat - The glue of the internet
  • +
  • IFTTT - Do more with the services you love
  • +
  • ActionDesk - Build powerful automations with your spreadsheet skills
  • +
  • Microsoft Flow - Automate tasks by integrating your favorite apps
  • +
  • Wayscript - A rapid scripting platform with drag-n-drop interface for Python and Javascript
  • +
  • Tray - Advanced integration platform for connecting up the tools you use every day
  • +
  • Automate Io - Put your business on autopilot. Connect 100+ business apps.
  • +
  • Blockspring - Supercharge your list building, reporting, and landing pages.
  • +
  • Oplim - Custom tasks on your website with zero code
  • +
  • Diagram - Nocode backend API builder with MongoDB and Firestore
  • +
  • Outfunnel - Keep customer data in sync across sales and marketing tools
  • +
+

Automation, Scrapers

+ +

Business Apps

+
    +
  • Betty Blocks - No-code enterprise application development
  • +
  • AppSheet - Intelligent no-code app development platform
  • +
  • Quick Base - Best way to manage data and automate processes, so you can accomplish more
  • +
  • Zoho Creator - Custom apps to run your business.
  • +
  • Calcapp - Build apps with your spreadsheet skills
  • +
+

Chatbots

+
    +
  • Manychat - Create a Messenger bot in minutes
  • +
  • It's Alive - Create a Facebook bot in minutes
  • +
  • Chatfuel - Create chatbots for your audience
  • +
  • Landbot - Lead generation landing page as chatbot
  • +
  • Botsify - Create your own automated chatbot online
  • +
  • Chatamo - Create intelligent voice and chatbot for marketing and sales
  • +
  • Flow XO - Create a chatbot with zero coding skills required
  • +
  • Smooch - Instantly deploy yout bots wherever users are
  • +
  • Rulai - AI Chatbot to deliver Scalable Self Service
  • +
+

Collaboration

+
    +
  • Notion - All-in-one workspace - notes, tasks, wikis & databases
  • +
  • Trello - All-in-one workspace and collaboration for businesses
  • +
+

Collaboration, Internal

+
    +
  • Quip - One place for all your team's work
  • +
+

CRM

+
    +
  • Salesflare - Simple & powerful CRM for small businesses
  • +
  • Pipedrive - CRM Gestion de leads en pipeline
  • +
+

CRM, Marketing

+
    +
  • Hubspot - A full platform of marketing, sales, customer service and CRM software
  • +
+

Customer Support

+
    +
  • Drift - Customer support chatbot
  • +
  • Crisp - Customer support directly in your website
  • +
+

Customer Support, Marketing, CRM

+
    +
  • Intercom - All-in-one customer support
  • +
+

Data, Marketing

+
    +
  • Hotjar - See how your visitors are really using your site
  • +
+

Database

+
    +
  • Airtable - Realtime spreadsheet database hybrid
  • +
  • NocoDB - Free & Open Source Airtable alternative - turns any SQL database into smart spreadsheet
  • +
  • Trevor - Query your live data, without code
  • +
+

Design

+
    +
  • Figma - The first interface design tool with real-time collaboration
  • +
  • unDraw - Free, open-source illustrations for everyone
  • +
+

Design, Websites

+
    +
  • Webflow - All-in-one web design platform
  • +
+

Ecommerce

+
    +
  • Shopify - Build your ecommerce store
  • +
  • Podia - Easily sell memberships, online courses and digital products
  • +
  • Monto - Product reviews for Webflow
  • +
  • Hingeto - Start your own Amazon-style marketplace
  • +
  • Volusion - Ecommerce website store & shopping cart software
  • +
+

Email

+
    +
  • Revue - Editorial newsletters tool for writers and publishers
  • +
  • Sendgrid - Email delivery service
  • +
  • Postcards - Create awesome emails with drag & drop simplicity
  • +
  • BEE - Create beautiful emails, fast.
  • +
  • Stripo - Free email template builder
  • +
  • Substack - Paid newsletters made simple
  • +
  • Mailchimp - Free emailing software
  • +
  • Converkit - Send automated emailing campaigns
  • +
+

Forms

+
    +
  • Typeform - Build beautiful conversational forms
  • +
  • Google Forms - Free forms from Google that connect directly to Google Sheets
  • +
  • Jotform - Online form builder & form creator
  • +
  • Paperform - Beautiful forms that feel like yours
  • +
+

Internal

+
    +
  • Coda - Build docs as powerful as apps
  • +
  • Nuclino - Knowledge base and collaboration
  • +
  • Contractbook - Efficient contract management
  • +
+

Internal, Web Apps

+
    +
  • Retool - Build custom internal tools in minutes
  • +
+

Landing Pages

+
    +
  • Landen - Beautiful Landing Pages. Designed Instantly
  • +
  • Launchaco - Simple landing pages for your startup
  • +
  • Leadpages - Landing page builder & lead gen software
  • +
  • Instapage - Leanding pages, up to 6x more conversions
  • +
  • Unbounce - Landing Pages - More Powerful Customization
  • +
  • Leeflets - Functional landing pages for all kind of things
  • +
  • RIVYT - Websites for Video Creators
  • +
+

Landing Pages, Websites

+
    +
  • Carrd - Build simple, fully responsive one-page sites
  • +
+

Marketing

+
    +
  • Outgrow - Boost your marketing with highly interactive content
  • +
  • Rewardful - Instant Affiliate & Referral Programs for Stripe
  • +
  • Fortvision - Create interactive experiences that lead to higher conversions
  • +
+

Marketplace

+
    +
  • Sharetribe - Create your first marketplace without code
  • +
+

Membership, Websites

+
    +
  • Memberstack - Memberships & gated content for websites
  • +
+

Mobile Apps

+
    +
  • Dropsource - Build and publish native mobile app without coding
  • +
  • Glide - Create mobile apps from Google Sheets
  • +
  • Lightwell - A simple tool for creating native iOS apps on Mac.
  • +
  • Adalo - Create apps as easy as making a slide deck
  • +
  • App Inventor - Create powerful Android apps without code using blocs coding
  • +
  • Thunkable - Create beautiful and powerful mobile apps without code
  • +
+

Mobile Apps, Video Games

+ +

Payment

+
    +
  • Stripe - Payment integration and management
  • +
  • Paypal - Send Money, Online or Set up a Merchant Store
  • +
  • Buy me a coffee - Easy way to support a projet
  • +
+

Payment, Ecommerce

+
    +
  • Gumroad - Sell anything directly to anyone
  • +
+

Payment, Membership

+
    +
  • Patreon - Easy way to contribute to a project
  • +
+

Podcast

+
    +
  • Anchor - The best way to create your podcast
  • +
+

Scrapers

+ +

Video

+
    +
  • Loom - Seamless screen, mic, and camera recording for Chrome
  • +
+

Voice

+
    +
  • Voiceflow - Build voice apps in your browser without coding
  • +
  • Vuix - Design voice apps in minutes
  • +
  • ApitoBot - Create an Alexa Skill or Google Action in minutes
  • +
+

VR

+
    +
  • Instavr - Make your VR apps in minutes
  • +
+

Web Apps

+
    +
  • Bubble - Build a fully functional web app without any code.
  • +
  • Corvid - Build advanced web applications, hassle-free
  • +
  • Boundless - Create dynamic, multisided web apps without coding
  • +
+

Websites

+
    +
  • Sheet2site - Turn your Google Sheets into a website
  • +
  • Universe - Make an awesome website from your phone
  • +
  • Table2Site - Generate websites from your Airtable base
  • +
  • Squarespace - All-in-one platform to build a beautiful online e-commerce
  • +
  • Wix - Free website builder
  • +
  • IM Creator - Free website builder
  • +
  • Weebly - Build a free website or online store
  • +
  • Webnode - Easy & Free website maker
  • +
  • Jimdo - Your website builder
  • +
  • Bookmark - Create a Website with AI
  • +
  • Strikingly - Make a website in minutes
  • +
  • Tilda - Create beautiful websites without any code
  • +
+

Websites, Membership

+
    +
  • Memberspace - Turn your audience into paying members.
  • +
+ +

Awesome-no-code-tools

+

This awesome list links relevant tools for required to make apps/sites/chatbot and any digital tools without code!

+

I know that some of you are thinking "What is awesome without code? on Github???" But you never know when having such a tool might become handy.

+

This list is based on the incredible work done by Louis Veyret & Clément Barberousse and published as a google sheet. I am saving it here as a safekeeping and to maintain it. +Originally published as

+
+

Outils pour créer des sites web, applications mobiles, chatbot sans coder. +Par Louis Veyret & Clément Barberousse +Source : https://docs.google.com/spreadsheets/d/1QRhocTMg1cZAZyWz5vznqg6KdZrzU-b557Il8p0Q7HM/edit#gid=1754454108

+
+

Awesome list

+

Analytics

+ +

Automation

+
    +
  • Zapier - Connect and automate 500+ web apps
  • +
  • Integromat - The glue of the internet
  • +
  • IFTTT - Do more with the services you love
  • +
  • ActionDesk - Build powerful automations with your spreadsheet skills
  • +
  • Microsoft Flow - Automate tasks by integrating your favorite apps
  • +
  • Wayscript - A rapid scripting platform with drag-n-drop interface for Python and Javascript
  • +
  • Tray - Advanced integration platform for connecting up the tools you use every day
  • +
  • Automate Io - Put your business on autopilot. Connect 100+ business apps.
  • +
  • Blockspring - Supercharge your list building, reporting, and landing pages.
  • +
  • Oplim - Custom tasks on your website with zero code
  • +
  • Diagram - Nocode backend API builder with MongoDB and Firestore
  • +
  • Outfunnel - Keep customer data in sync across sales and marketing tools
  • +
+

Automation, Scrapers

+ +

Business Apps

+
    +
  • Betty Blocks - No-code enterprise application development
  • +
  • AppSheet - Intelligent no-code app development platform
  • +
  • Quick Base - Best way to manage data and automate processes, so you can accomplish more
  • +
  • Zoho Creator - Custom apps to run your business.
  • +
  • Calcapp - Build apps with your spreadsheet skills
  • +
+

Chatbots

+
    +
  • Manychat - Create a Messenger bot in minutes
  • +
  • It's Alive - Create a Facebook bot in minutes
  • +
  • Chatfuel - Create chatbots for your audience
  • +
  • Landbot - Lead generation landing page as chatbot
  • +
  • Botsify - Create your own automated chatbot online
  • +
  • Chatamo - Create intelligent voice and chatbot for marketing and sales
  • +
  • Flow XO - Create a chatbot with zero coding skills required
  • +
  • Smooch - Instantly deploy yout bots wherever users are
  • +
  • Rulai - AI Chatbot to deliver Scalable Self Service
  • +
+

Collaboration

+
    +
  • Notion - All-in-one workspace - notes, tasks, wikis & databases
  • +
  • Trello - All-in-one workspace and collaboration for businesses
  • +
+

Collaboration, Internal

+
    +
  • Quip - One place for all your team's work
  • +
+

CRM

+
    +
  • Salesflare - Simple & powerful CRM for small businesses
  • +
  • Pipedrive - CRM Gestion de leads en pipeline
  • +
+

CRM, Marketing

+
    +
  • Hubspot - A full platform of marketing, sales, customer service and CRM software
  • +
+

Customer Support

+
    +
  • Drift - Customer support chatbot
  • +
  • Crisp - Customer support directly in your website
  • +
+

Customer Support, Marketing, CRM

+
    +
  • Intercom - All-in-one customer support
  • +
+

Data, Marketing

+
    +
  • Hotjar - See how your visitors are really using your site
  • +
+

Database

+
    +
  • Airtable - Realtime spreadsheet database hybrid
  • +
  • NocoDB - Free & Open Source Airtable alternative - turns any SQL database into smart spreadsheet
  • +
  • Trevor - Query your live data, without code
  • +
+

Design

+
    +
  • Figma - The first interface design tool with real-time collaboration
  • +
  • unDraw - Free, open-source illustrations for everyone
  • +
+

Design, Websites

+
    +
  • Webflow - All-in-one web design platform
  • +
+

Ecommerce

+
    +
  • Shopify - Build your ecommerce store
  • +
  • Podia - Easily sell memberships, online courses and digital products
  • +
  • Monto - Product reviews for Webflow
  • +
  • Hingeto - Start your own Amazon-style marketplace
  • +
  • Volusion - Ecommerce website store & shopping cart software
  • +
+

Email

+
    +
  • Revue - Editorial newsletters tool for writers and publishers
  • +
  • Sendgrid - Email delivery service
  • +
  • Postcards - Create awesome emails with drag & drop simplicity
  • +
  • BEE - Create beautiful emails, fast.
  • +
  • Stripo - Free email template builder
  • +
  • Substack - Paid newsletters made simple
  • +
  • Mailchimp - Free emailing software
  • +
  • Converkit - Send automated emailing campaigns
  • +
+

Forms

+
    +
  • Typeform - Build beautiful conversational forms
  • +
  • Google Forms - Free forms from Google that connect directly to Google Sheets
  • +
  • Jotform - Online form builder & form creator
  • +
  • Paperform - Beautiful forms that feel like yours
  • +
+

Internal

+
    +
  • Coda - Build docs as powerful as apps
  • +
  • Nuclino - Knowledge base and collaboration
  • +
  • Contractbook - Efficient contract management
  • +
+

Internal, Web Apps

+
    +
  • Retool - Build custom internal tools in minutes
  • +
+

Landing Pages

+
    +
  • Landen - Beautiful Landing Pages. Designed Instantly
  • +
  • Launchaco - Simple landing pages for your startup
  • +
  • Leadpages - Landing page builder & lead gen software
  • +
  • Instapage - Leanding pages, up to 6x more conversions
  • +
  • Unbounce - Landing Pages - More Powerful Customization
  • +
  • Leeflets - Functional landing pages for all kind of things
  • +
  • RIVYT - Websites for Video Creators
  • +
+

Landing Pages, Websites

+
    +
  • Carrd - Build simple, fully responsive one-page sites
  • +
+

Marketing

+
    +
  • Outgrow - Boost your marketing with highly interactive content
  • +
  • Rewardful - Instant Affiliate & Referral Programs for Stripe
  • +
  • Fortvision - Create interactive experiences that lead to higher conversions
  • +
+

Marketplace

+
    +
  • Sharetribe - Create your first marketplace without code
  • +
+

Membership, Websites

+
    +
  • Memberstack - Memberships & gated content for websites
  • +
+

Mobile Apps

+
    +
  • Dropsource - Build and publish native mobile app without coding
  • +
  • Glide - Create mobile apps from Google Sheets
  • +
  • Lightwell - A simple tool for creating native iOS apps on Mac.
  • +
  • Adalo - Create apps as easy as making a slide deck
  • +
  • App Inventor - Create powerful Android apps without code using blocs coding
  • +
  • Thunkable - Create beautiful and powerful mobile apps without code
  • +
+

Mobile Apps, Video Games

+ +

Payment

+
    +
  • Stripe - Payment integration and management
  • +
  • Paypal - Send Money, Online or Set up a Merchant Store
  • +
  • Buy me a coffee - Easy way to support a projet
  • +
+

Payment, Ecommerce

+
    +
  • Gumroad - Sell anything directly to anyone
  • +
+

Payment, Membership

+
    +
  • Patreon - Easy way to contribute to a project
  • +
+

Podcast

+
    +
  • Anchor - The best way to create your podcast
  • +
+

Scrapers

+ +

Video

+
    +
  • Loom - Seamless screen, mic, and camera recording for Chrome
  • +
+

Voice

+
    +
  • Voiceflow - Build voice apps in your browser without coding
  • +
  • Vuix - Design voice apps in minutes
  • +
  • ApitoBot - Create an Alexa Skill or Google Action in minutes
  • +
+

VR

+
    +
  • Instavr - Make your VR apps in minutes
  • +
+

Web Apps

+
    +
  • Bubble - Build a fully functional web app without any code.
  • +
  • Corvid - Build advanced web applications, hassle-free
  • +
  • Boundless - Create dynamic, multisided web apps without coding
  • +
+

Websites

+
    +
  • Sheet2site - Turn your Google Sheets into a website
  • +
  • Universe - Make an awesome website from your phone
  • +
  • Table2Site - Generate websites from your Airtable base
  • +
  • Squarespace - All-in-one platform to build a beautiful online e-commerce
  • +
  • Wix - Free website builder
  • +
  • IM Creator - Free website builder
  • +
  • Weebly - Build a free website or online store
  • +
  • Webnode - Easy & Free website maker
  • +
  • Jimdo - Your website builder
  • +
  • Bookmark - Create a Website with AI
  • +
  • Strikingly - Make a website in minutes
  • +
  • Tilda - Create beautiful websites without any code
  • +
+

Websites, Membership

+
    +
  • Memberspace - Turn your audience into paying members.
  • +
+ +

Awesome-no-code-tools

+

This awesome list links relevant tools for required to make apps/sites/chatbot and any digital tools without code!

+

I know that some of you are thinking "What is awesome without code? on Github???" But you never know when having such a tool might become handy.

+

This list is based on the incredible work done by Louis Veyret & Clément Barberousse and published as a google sheet. I am saving it here as a safekeeping and to maintain it. +Originally published as

+
+

Outils pour créer des sites web, applications mobiles, chatbot sans coder. +Par Louis Veyret & Clément Barberousse +Source : https://docs.google.com/spreadsheets/d/1QRhocTMg1cZAZyWz5vznqg6KdZrzU-b557Il8p0Q7HM/edit#gid=1754454108

+
+

Awesome list

+

Analytics

+ +

Automation

+
    +
  • Zapier - Connect and automate 500+ web apps
  • +
  • Integromat - The glue of the internet
  • +
  • IFTTT - Do more with the services you love
  • +
  • ActionDesk - Build powerful automations with your spreadsheet skills
  • +
  • Microsoft Flow - Automate tasks by integrating your favorite apps
  • +
  • Wayscript - A rapid scripting platform with drag-n-drop interface for Python and Javascript
  • +
  • Tray - Advanced integration platform for connecting up the tools you use every day
  • +
  • Automate Io - Put your business on autopilot. Connect 100+ business apps.
  • +
  • Blockspring - Supercharge your list building, reporting, and landing pages.
  • +
  • Oplim - Custom tasks on your website with zero code
  • +
  • Diagram - Nocode backend API builder with MongoDB and Firestore
  • +
  • Outfunnel - Keep customer data in sync across sales and marketing tools
  • +
+

Automation, Scrapers

+ +

Business Apps

+
    +
  • Betty Blocks - No-code enterprise application development
  • +
  • AppSheet - Intelligent no-code app development platform
  • +
  • Quick Base - Best way to manage data and automate processes, so you can accomplish more
  • +
  • Zoho Creator - Custom apps to run your business.
  • +
  • Calcapp - Build apps with your spreadsheet skills
  • +
+

Chatbots

+
    +
  • Manychat - Create a Messenger bot in minutes
  • +
  • It's Alive - Create a Facebook bot in minutes
  • +
  • Chatfuel - Create chatbots for your audience
  • +
  • Landbot - Lead generation landing page as chatbot
  • +
  • Botsify - Create your own automated chatbot online
  • +
  • Chatamo - Create intelligent voice and chatbot for marketing and sales
  • +
  • Flow XO - Create a chatbot with zero coding skills required
  • +
  • Smooch - Instantly deploy yout bots wherever users are
  • +
  • Rulai - AI Chatbot to deliver Scalable Self Service
  • +
+

Collaboration

+
    +
  • Notion - All-in-one workspace - notes, tasks, wikis & databases
  • +
  • Trello - All-in-one workspace and collaboration for businesses
  • +
+

Collaboration, Internal

+
    +
  • Quip - One place for all your team's work
  • +
+

CRM

+
    +
  • Salesflare - Simple & powerful CRM for small businesses
  • +
  • Pipedrive - CRM Gestion de leads en pipeline
  • +
+

CRM, Marketing

+
    +
  • Hubspot - A full platform of marketing, sales, customer service and CRM software
  • +
+

Customer Support

+
    +
  • Drift - Customer support chatbot
  • +
  • Crisp - Customer support directly in your website
  • +
+

Customer Support, Marketing, CRM

+
    +
  • Intercom - All-in-one customer support
  • +
+

Data, Marketing

+
    +
  • Hotjar - See how your visitors are really using your site
  • +
+

Database

+
    +
  • Airtable - Realtime spreadsheet database hybrid
  • +
  • NocoDB - Free & Open Source Airtable alternative - turns any SQL database into smart spreadsheet
  • +
  • Trevor - Query your live data, without code
  • +
+

Design

+
    +
  • Figma - The first interface design tool with real-time collaboration
  • +
  • unDraw - Free, open-source illustrations for everyone
  • +
+

Design, Websites

+
    +
  • Webflow - All-in-one web design platform
  • +
+

Ecommerce

+
    +
  • Shopify - Build your ecommerce store
  • +
  • Podia - Easily sell memberships, online courses and digital products
  • +
  • Monto - Product reviews for Webflow
  • +
  • Hingeto - Start your own Amazon-style marketplace
  • +
  • Volusion - Ecommerce website store & shopping cart software
  • +
+

Email

+
    +
  • Revue - Editorial newsletters tool for writers and publishers
  • +
  • Sendgrid - Email delivery service
  • +
  • Postcards - Create awesome emails with drag & drop simplicity
  • +
  • BEE - Create beautiful emails, fast.
  • +
  • Stripo - Free email template builder
  • +
  • Substack - Paid newsletters made simple
  • +
  • Mailchimp - Free emailing software
  • +
  • Converkit - Send automated emailing campaigns
  • +
+

Forms

+
    +
  • Typeform - Build beautiful conversational forms
  • +
  • Google Forms - Free forms from Google that connect directly to Google Sheets
  • +
  • Jotform - Online form builder & form creator
  • +
  • Paperform - Beautiful forms that feel like yours
  • +
+

Internal

+
    +
  • Coda - Build docs as powerful as apps
  • +
  • Nuclino - Knowledge base and collaboration
  • +
  • Contractbook - Efficient contract management
  • +
+

Internal, Web Apps

+
    +
  • Retool - Build custom internal tools in minutes
  • +
+

Landing Pages

+
    +
  • Landen - Beautiful Landing Pages. Designed Instantly
  • +
  • Launchaco - Simple landing pages for your startup
  • +
  • Leadpages - Landing page builder & lead gen software
  • +
  • Instapage - Leanding pages, up to 6x more conversions
  • +
  • Unbounce - Landing Pages - More Powerful Customization
  • +
  • Leeflets - Functional landing pages for all kind of things
  • +
  • RIVYT - Websites for Video Creators
  • +
+

Landing Pages, Websites

+
    +
  • Carrd - Build simple, fully responsive one-page sites
  • +
+

Marketing

+
    +
  • Outgrow - Boost your marketing with highly interactive content
  • +
  • Rewardful - Instant Affiliate & Referral Programs for Stripe
  • +
  • Fortvision - Create interactive experiences that lead to higher conversions
  • +
+

Marketplace

+
    +
  • Sharetribe - Create your first marketplace without code
  • +
+

Membership, Websites

+
    +
  • Memberstack - Memberships & gated content for websites
  • +
+

Mobile Apps

+
    +
  • Dropsource - Build and publish native mobile app without coding
  • +
  • Glide - Create mobile apps from Google Sheets
  • +
  • Lightwell - A simple tool for creating native iOS apps on Mac.
  • +
  • Adalo - Create apps as easy as making a slide deck
  • +
  • App Inventor - Create powerful Android apps without code using blocs coding
  • +
  • Thunkable - Create beautiful and powerful mobile apps without code
  • +
+

Mobile Apps, Video Games

+ +

Payment

+
    +
  • Stripe - Payment integration and management
  • +
  • Paypal - Send Money, Online or Set up a Merchant Store
  • +
  • Buy me a coffee - Easy way to support a projet
  • +
+

Payment, Ecommerce

+
    +
  • Gumroad - Sell anything directly to anyone
  • +
+

Payment, Membership

+
    +
  • Patreon - Easy way to contribute to a project
  • +
+

Podcast

+
    +
  • Anchor - The best way to create your podcast
  • +
+

Scrapers

+ +

Video

+
    +
  • Loom - Seamless screen, mic, and camera recording for Chrome
  • +
+

Voice

+
    +
  • Voiceflow - Build voice apps in your browser without coding
  • +
  • Vuix - Design voice apps in minutes
  • +
  • ApitoBot - Create an Alexa Skill or Google Action in minutes
  • +
+

VR

+
    +
  • Instavr - Make your VR apps in minutes
  • +
+

Web Apps

+
    +
  • Bubble - Build a fully functional web app without any code.
  • +
  • Corvid - Build advanced web applications, hassle-free
  • +
  • Boundless - Create dynamic, multisided web apps without coding
  • +
+

Websites

+
    +
  • Sheet2site - Turn your Google Sheets into a website
  • +
  • Universe - Make an awesome website from your phone
  • +
  • Table2Site - Generate websites from your Airtable base
  • +
  • Squarespace - All-in-one platform to build a beautiful online e-commerce
  • +
  • Wix - Free website builder
  • +
  • IM Creator - Free website builder
  • +
  • Weebly - Build a free website or online store
  • +
  • Webnode - Easy & Free website maker
  • +
  • Jimdo - Your website builder
  • +
  • Bookmark - Create a Website with AI
  • +
  • Strikingly - Make a website in minutes
  • +
  • Tilda - Create beautiful websites without any code
  • +
+

Websites, Membership

+
    +
  • Memberspace - Turn your audience into paying members.
  • +
diff --git a/components/fluent-ext/fluentqa-md/low-code.json b/components/fluent-ext/fluentqa-md/low-code.json new file mode 100644 index 0000000..61bb3c0 --- /dev/null +++ b/components/fluent-ext/fluentqa-md/low-code.json @@ -0,0 +1,704 @@ +[ + { + "category": "Analytics", + "url": "https://simpleanalytics.com/", + "name": "Simple Analytics", + "desc": "Simple Analytics - Simple, clean, and friendly analytics" + }, + { + "category": "Analytics", + "url": "https://analytics.google.com", + "name": "Google Analytics", + "desc": "Google Analytics - Free website analytics" + }, + { + "category": "Automation", + "url": "https://zapier.com/", + "name": "Zapier", + "desc": "Zapier - Connect and automate 500+ web apps" + }, + { + "category": "Automation", + "url": "https://www.integromat.com/en/", + "name": "Integromat", + "desc": "Integromat - The glue of the internet" + }, + { + "category": "Automation", + "url": "https://ifttt.com/", + "name": "IFTTT", + "desc": "IFTTT - Do more with the services you love" + }, + { + "category": "Automation", + "url": "https://www.actiondesk.io/", + "name": "ActionDesk", + "desc": "ActionDesk - Build powerful automations with your spreadsheet skills" + }, + { + "category": "Automation", + "url": "https://flow.microsoft.com/fr-fr/", + "name": "Microsoft Flow", + "desc": "Microsoft Flow - Automate tasks by integrating your favorite apps" + }, + { + "category": "Automation", + "url": "https://wayscript.com", + "name": "Wayscript", + "desc": "Wayscript - A rapid scripting platform with drag-n-drop interface for Python and Javascript" + }, + { + "category": "Automation", + "url": "https://tray.io/solutions/sales", + "name": "Tray", + "desc": "Tray - Advanced integration platform for connecting up the tools you use every day" + }, + { + "category": "Automation", + "url": "https://automate.io/", + "name": "Automate Io", + "desc": "Automate Io - Put your business on autopilot. Connect 100+ business apps." + }, + { + "category": "Automation", + "url": "https://www.blockspring.com/", + "name": "Blockspring", + "desc": "Blockspring - Supercharge your list building, reporting, and landing pages." + }, + { + "category": "Automation", + "url": "https://oplim.com/", + "name": "Oplim", + "desc": "Oplim - Custom tasks on your website with zero code" + }, + { + "category": "Automation", + "url": "https://www.ondiagram.com", + "name": "Diagram", + "desc": "Diagram - Nocode backend API builder with MongoDB and Firestore" + }, + { + "category": "Automation", + "url": "https://outfunnel.com/", + "name": "Outfunnel", + "desc": "Outfunnel - Keep customer data in sync across sales and marketing tools" + }, + { + "category": "Automation, Scrapers", + "url": "https://phantombuster.com/", + "name": "Phantombuster", + "desc": "Phantombuster - Marketplace of simple to use no-code APIs" + }, + { + "category": "Business Apps", + "url": "https://www.bettyblocks.com", + "name": "Betty Blocks", + "desc": "Betty Blocks - No-code enterprise application development" + }, + { + "category": "Business Apps", + "url": "https://www.appsheet.com", + "name": "AppSheet", + "desc": "AppSheet - Intelligent no-code app development platform" + }, + { + "category": "Business Apps", + "url": "https://www.quickbase.com/", + "name": "Quick Base", + "desc": "Quick Base - Best way to manage data and automate processes, so you can accomplish more" + }, + { + "category": "Business Apps", + "url": "https://www.zoho.com/fr/creator/", + "name": "Zoho Creator", + "desc": "Zoho Creator - Custom apps to run your business." + }, + { + "category": "Business Apps", + "url": "https://www.calcapp.net/", + "name": "Calcapp", + "desc": "Calcapp - Build apps with your spreadsheet skills" + }, + { + "category": "Chatbots", + "url": "https://manychat.com/", + "name": "Manychat", + "desc": "Manychat - Create a Messenger bot in minutes" + }, + { + "category": "Chatbots", + "url": "https://itsalive.io/", + "name": "It's Alive", + "desc": "It's Alive - Create a Facebook bot in minutes" + }, + { + "category": "Chatbots", + "url": "https://chatfuel.com", + "name": "Chatfuel", + "desc": "Chatfuel - Create chatbots for your audience" + }, + { + "category": "Chatbots", + "url": "https://landbot.io/", + "name": "Landbot", + "desc": "Landbot - Lead generation landing page as chatbot" + }, + { + "category": "Chatbots", + "url": "https://botsify.com/", + "name": "Botsify", + "desc": "Botsify - Create your own automated chatbot online" + }, + { + "category": "Chatbots", + "url": "https://chatamo.com/", + "name": "Chatamo", + "desc": "Chatamo - Create intelligent voice and chatbot for marketing and sales" + }, + { + "category": "Chatbots", + "url": "https://flowxo.com/", + "name": "Flow XO", + "desc": "Flow XO - Create a chatbot with zero coding skills required" + }, + { + "category": "Chatbots", + "url": "https://smooch.io/", + "name": "Smooch", + "desc": "Smooch - Instantly deploy yout bots wherever users are" + }, + { + "category": "Chatbots", + "url": "https://rul.ai/", + "name": "Rulai", + "desc": "Rulai - AI Chatbot to deliver Scalable Self Service" + }, + { + "category": "Collaboration", + "url": "https://www.notion.so", + "name": "Notion", + "desc": "Notion - All-in-one workspace - notes, tasks, wikis & databases" + }, + { + "category": "Collaboration", + "url": "https://trello.com/louisveyret1/boards", + "name": "Trello", + "desc": "Trello - All-in-one workspace and collaboration for businesses" + }, + { + "category": "Collaboration, Internal", + "url": "https://quip.com/", + "name": "Quip", + "desc": "Quip - One place for all your team's work" + }, + { + "category": "CRM", + "url": "https://salesflare.com/", + "name": "Salesflare", + "desc": "Salesflare - Simple & powerful CRM for small businesses" + }, + { + "category": "CRM", + "url": "https://www.pipedrive.com/fr", + "name": "Pipedrive", + "desc": "Pipedrive - CRM Gestion de leads en pipeline" + }, + { + "category": "CRM, Marketing", + "url": "https://www.hubspot.com/", + "name": "Hubspot", + "desc": "Hubspot - A full platform of marketing, sales, customer service and CRM software" + }, + { + "category": "Customer Support", + "url": "https://www.drift.com/", + "name": "Drift", + "desc": "Drift - Customer support chatbot" + }, + { + "category": "Customer Support", + "url": "https://crisp.chat/fr/", + "name": "Crisp", + "desc": "Crisp - Customer support directly in your website" + }, + { + "category": "Customer Support, Marketing, CRM", + "url": "https://www.intercom.com/", + "name": "Intercom", + "desc": "Intercom - All-in-one customer support" + }, + { + "category": "Data, Marketing", + "url": "https://www.hotjar.com/", + "name": "Hotjar", + "desc": "Hotjar - See how your visitors are really using your site" + }, + { + "category": "Database", + "url": "airtable.com", + "name": "Airtable", + "desc": "Airtable - Realtime spreadsheet database hybrid" + }, + { + "category": "Database", + "url": "https://github.com/nocodb/nocodb", + "name": "NocoDB", + "desc": "NocoDB - Free & Open Source Airtable alternative - turns any SQL database into smart spreadsheet" + }, + { + "category": "Database", + "url": "https://trevor.io/", + "name": "Trevor", + "desc": "Trevor - Query your live data, without code" + }, + { + "category": "Design", + "url": "https://www.figma.com/", + "name": "Figma", + "desc": "Figma - The first interface design tool with real-time collaboration" + }, + { + "category": "Design", + "url": "https://undraw.co/", + "name": "unDraw", + "desc": "unDraw - Free, open-source illustrations for everyone" + }, + { + "category": "Design, Websites", + "url": "https://webflow.com", + "name": "Webflow", + "desc": "Webflow - All-in-one web design platform" + }, + { + "category": "Ecommerce", + "url": "https://fr.shopify.com/", + "name": "Shopify", + "desc": "Shopify - Build your ecommerce store" + }, + { + "category": "Ecommerce", + "url": "https://www.podia.com/fr/home", + "name": "Podia", + "desc": "Podia - Easily sell memberships, online courses and digital products" + }, + { + "category": "Ecommerce", + "url": "https://www.monto.io/", + "name": "Monto", + "desc": "Monto - Product reviews for Webflow" + }, + { + "category": "Ecommerce", + "url": "https://www.hingeto.com/", + "name": "Hingeto", + "desc": "Hingeto - Start your own Amazon-style marketplace" + }, + { + "category": "Ecommerce", + "url": "https://www.volusion.com/", + "name": "Volusion", + "desc": "Volusion - Ecommerce website store & shopping cart software" + }, + { + "category": "Email", + "url": "https://www.getrevue.co/", + "name": "Revue", + "desc": "Revue - Editorial newsletters tool for writers and publishers" + }, + { + "category": "Email", + "url": "https://sendgrid.com/", + "name": "Sendgrid", + "desc": "Sendgrid - Email delivery service" + }, + { + "category": "Email", + "url": "https://designmodo.com/postcards/", + "name": "Postcards", + "desc": "Postcards - Create awesome emails with drag & drop simplicity" + }, + { + "category": "Email", + "url": "https://beefree.io/", + "name": "BEE", + "desc": "BEE - Create beautiful emails, fast." + }, + { + "category": "Email", + "url": "https://stripo.email/fr/", + "name": "Stripo", + "desc": "Stripo - Free email template builder" + }, + { + "category": "Email", + "url": "https://substack.com/", + "name": "Substack", + "desc": "Substack - Paid newsletters made simple" + }, + { + "category": "Email", + "url": "https://mailchimp.com/", + "name": "Mailchimp", + "desc": "Mailchimp - Free emailing software" + }, + { + "category": "Email", + "url": "https://convertkit.com/", + "name": "Converkit", + "desc": "Converkit - Send automated emailing campaigns" + }, + { + "category": "Forms", + "url": "https://www.typeform.com/", + "name": "Typeform", + "desc": "Typeform - Build beautiful conversational forms" + }, + { + "category": "Forms", + "url": "https://www.google.com/intl/fr/forms/about/", + "name": "Google Forms", + "desc": "Google Forms - Free forms from Google that connect directly to Google Sheets" + }, + { + "category": "Forms", + "url": "https://www.jotform.com/", + "name": "Jotform", + "desc": "Jotform - Online form builder & form creator" + }, + { + "category": "Forms", + "url": "https://paperform.co/", + "name": "Paperform", + "desc": "Paperform - Beautiful forms that feel like yours" + }, + { + "category": "Internal", + "url": "https://coda.io/welcome", + "name": "Coda", + "desc": "Coda - Build docs as powerful as apps" + }, + { + "category": "Internal", + "url": "https://www.nuclino.com", + "name": "Nuclino", + "desc": "Nuclino - Knowledge base and collaboration" + }, + { + "category": "Internal", + "url": "https://contractbook.co/", + "name": "Contractbook", + "desc": "Contractbook - Efficient contract management" + }, + { + "category": "Internal, Web Apps", + "url": "https://retool.com/", + "name": "Retool", + "desc": "Retool - Build custom internal tools in minutes" + }, + { + "category": "Landing Pages", + "url": "https://www.landen.co/", + "name": "Landen", + "desc": "Landen - Beautiful Landing Pages. Designed Instantly" + }, + { + "category": "Landing Pages", + "url": "https://www.launchaco.com/", + "name": "Launchaco", + "desc": "Launchaco - Simple landing pages for your startup" + }, + { + "category": "Landing Pages", + "url": "https://www.leadpages.net/", + "name": "Leadpages", + "desc": "Leadpages - Landing page builder & lead gen software" + }, + { + "category": "Landing Pages", + "url": "https://instapage.com", + "name": "Instapage", + "desc": "Instapage - Leanding pages, up to 6x more conversions" + }, + { + "category": "Landing Pages", + "url": "https://unbounce.com/", + "name": "Unbounce", + "desc": "Unbounce - Landing Pages - More Powerful Customization" + }, + { + "category": "Landing Pages", + "url": "https://leeflets.com/", + "name": "Leeflets", + "desc": "Leeflets - Functional landing pages for all kind of things" + }, + { + "category": "Landing Pages", + "url": "https://rivyt.com/", + "name": "RIVYT", + "desc": "RIVYT - Websites for Video Creators" + }, + { + "category": "Landing Pages, Websites", + "url": "https://carrd.co", + "name": "Carrd", + "desc": "Carrd - Build simple, fully responsive one-page sites" + }, + { + "category": "Marketing", + "url": "https://outgrow.co/", + "name": "Outgrow", + "desc": "Outgrow - Boost your marketing with highly interactive content" + }, + { + "category": "Marketing", + "url": "https://www.getrewardful.com/", + "name": "Rewardful", + "desc": "Rewardful - Instant Affiliate & Referral Programs for Stripe" + }, + { + "category": "Marketing", + "url": "https://fortvision.com/", + "name": "Fortvision", + "desc": "Fortvision - Create interactive experiences that lead to higher conversions" + }, + { + "category": "Marketplace", + "url": "https://www.sharetribe.com", + "name": "Sharetribe", + "desc": "Sharetribe - Create your first marketplace without code" + }, + { + "category": "Membership, Websites", + "url": "https://www.memberstack.io/", + "name": "Memberstack", + "desc": "Memberstack - Memberships & gated content for websites" + }, + { + "category": "Mobile Apps", + "url": "https://www.dropsource.com/", + "name": "Dropsource", + "desc": "Dropsource - Build and publish native mobile app without coding" + }, + { + "category": "Mobile Apps", + "url": "glideapps.com", + "name": "Glide", + "desc": "Glide - Create mobile apps from Google Sheets" + }, + { + "category": "Mobile Apps", + "url": "https://lightwell.pro/", + "name": "Lightwell", + "desc": "Lightwell - A simple tool for creating native iOS apps on Mac." + }, + { + "category": "Mobile Apps", + "url": "https://www.adalo.com", + "name": "Adalo", + "desc": "Adalo - Create apps as easy as making a slide deck" + }, + { + "category": "Mobile Apps", + "url": "https://appinventor.mit.edu/", + "name": "App Inventor", + "desc": "App Inventor - Create powerful Android apps without code using blocs coding" + }, + { + "category": "Mobile Apps", + "url": "https://thunkable.com", + "name": "Thunkable", + "desc": "Thunkable - Create beautiful and powerful mobile apps without code" + }, + { + "category": "Mobile Apps, Video Games", + "url": "https://www.buildbox.com/", + "name": "Buildbox", + "desc": "Buildbox - Make amazing mobile games without coding" + }, + { + "category": "Mobile Apps, Video Games", + "url": "https://apponboard.com/studio/", + "name": "AppOnboard Studio", + "desc": "AppOnboard Studio - Where app ideas come to life. No code required." + }, + { + "category": "Payment", + "url": "https://stripe.com/fr-us", + "name": "Stripe", + "desc": "Stripe - Payment integration and management" + }, + { + "category": "Payment", + "url": "http://paypal.com", + "name": "Paypal", + "desc": "Paypal - Send Money, Online or Set up a Merchant Store" + }, + { + "category": "Payment", + "url": "https://www.buymeacoffee.com/", + "name": "Buy me a coffee", + "desc": "Buy me a coffee - Easy way to support a projet" + }, + { + "category": "Payment, Ecommerce", + "url": "https://gumroad.com/?locale=fr", + "name": "Gumroad", + "desc": "Gumroad - Sell anything directly to anyone" + }, + { + "category": "Payment, Membership", + "url": "https://www.patreon.com/", + "name": "Patreon", + "desc": "Patreon - Easy way to contribute to a project" + }, + { + "category": "Podcast", + "url": "https://anchor.fm/", + "name": "Anchor", + "desc": "Anchor - The best way to create your podcast" + }, + { + "category": "Scrapers", + "url": "https://www.octoparse.com/", + "name": "Octoparse", + "desc": "Octoparse - Easy web scraping for everyone" + }, + { + "category": "Scrapers", + "url": "https://www.parsehub.com/", + "name": "Parsehub", + "desc": "Parsehub - Free web scraping" + }, + { + "category": "Scrapers", + "url": "https://data-miner.io/", + "name": "Dataminer", + "desc": "Dataminer - Easy to use web scraping" + }, + { + "category": "Video", + "url": "https://www.loom.com", + "name": "Loom", + "desc": "Loom - Seamless screen, mic, and camera recording for Chrome" + }, + { + "category": "Voice", + "url": "https://www.voiceflow.com/", + "name": "Voiceflow", + "desc": "Voiceflow - Build voice apps in your browser without coding" + }, + { + "category": "Voice", + "url": "https://vuix.io/", + "name": "Vuix", + "desc": "Vuix - Design voice apps in minutes" + }, + { + "category": "Voice", + "url": "https://apitobot.io/", + "name": "ApitoBot", + "desc": "ApitoBot - Create an Alexa Skill or Google Action in minutes" + }, + { + "category": "VR", + "url": "https://www.instavr.co/", + "name": "Instavr", + "desc": "Instavr - Make your VR apps in minutes" + }, + { + "category": "Web Apps", + "url": "http://bubble.is", + "name": "Bubble", + "desc": "Bubble - Build a fully functional web app without any code." + }, + { + "category": "Web Apps", + "url": "https://www.wix.com/corvid", + "name": "Corvid", + "desc": "Corvid - Build advanced web applications, hassle-free" + }, + { + "category": "Web Apps", + "url": "https://www.boundlesslabs.com/", + "name": "Boundless", + "desc": "Boundless - Create dynamic, multisided web apps without coding" + }, + { + "category": "Websites", + "url": "https://www.sheet2site.com/", + "name": "Sheet2site", + "desc": "Sheet2site - Turn your Google Sheets into a website" + }, + { + "category": "Websites", + "url": "https://apps.apple.com/us/app/universe-website-builder/id1211437633", + "name": "Universe", + "desc": "Universe - Make an awesome website from your phone" + }, + { + "category": "Websites", + "url": "https://table2site.com", + "name": "Table2Site", + "desc": "Table2Site - Generate websites from your Airtable base" + }, + { + "category": "Websites", + "url": "https://fr.squarespace.com/", + "name": "Squarespace", + "desc": "Squarespace - All-in-one platform to build a beautiful online e-commerce" + }, + { + "category": "Websites", + "url": "https://fr.wix.com/", + "name": "Wix", + "desc": "Wix - Free website builder" + }, + { + "category": "Websites", + "url": "https://www.imcreator.com/", + "name": "IM Creator", + "desc": "IM Creator - Free website builder" + }, + { + "category": "Websites", + "url": "https://www.weebly.com/?lang=fr", + "name": "Weebly", + "desc": "Weebly - Build a free website or online store" + }, + { + "category": "Websites", + "url": "https://www.webnode.fr/", + "name": "Webnode", + "desc": "Webnode - Easy & Free website maker" + }, + { + "category": "Websites", + "url": "https://www.jimdo.com/fr/", + "name": "Jimdo", + "desc": "Jimdo - Your website builder" + }, + { + "category": "Websites", + "url": "https://www.bookmark.com/", + "name": "Bookmark", + "desc": "Bookmark - Create a Website with AI" + }, + { + "category": "Websites", + "url": "https://www.strikingly.com/", + "name": "Strikingly", + "desc": "Strikingly - Make a website in minutes" + }, + { + "category": "Websites", + "url": "https://tilda.cc/", + "name": "Tilda", + "desc": "Tilda - Create beautiful websites without any code" + }, + { + "category": "Websites, Membership", + "url": "https://www.memberspace.com/", + "name": "Memberspace", + "desc": "Memberspace - Turn your audience into paying members." + } +] \ No newline at end of file diff --git a/components/fluent-ext/fluentqa-md/pom.xml b/components/fluent-ext/fluentqa-md/pom.xml new file mode 100644 index 0000000..33ca184 --- /dev/null +++ b/components/fluent-ext/fluentqa-md/pom.xml @@ -0,0 +1,33 @@ + + + 4.0.0 + + io.fluentqa + fluent-ext + 1.0-SNAPSHOT + + + fluentqa-md + + + + com.vladsch.flexmark + flexmark-all + 0.64.0 + + + io.fluentqa + fluent-builtin + ${fluent.version} + + + + org.jsoup + jsoup + 1.15.4 + + + + \ No newline at end of file diff --git a/components/fluent-ext/fluentqa-md/src/main/java/io/fluentqa/md/MarkdownAccessor.java b/components/fluent-ext/fluentqa-md/src/main/java/io/fluentqa/md/MarkdownAccessor.java new file mode 100644 index 0000000..76593ea --- /dev/null +++ b/components/fluent-ext/fluentqa-md/src/main/java/io/fluentqa/md/MarkdownAccessor.java @@ -0,0 +1,4 @@ +package io.fluentqa.md; + +public class MarkdownAccessor { +} diff --git a/components/fluent-ext/fluentqa-md/src/main/java/io/fluentqa/md/package-info.java b/components/fluent-ext/fluentqa-md/src/main/java/io/fluentqa/md/package-info.java new file mode 100644 index 0000000..0868d5e --- /dev/null +++ b/components/fluent-ext/fluentqa-md/src/main/java/io/fluentqa/md/package-info.java @@ -0,0 +1 @@ +package io.fluentqa.md; \ No newline at end of file diff --git a/components/fluent-ext/fluentqa-md/src/main/java/io/fluentqa/md/parser/FieldParseConfig.java b/components/fluent-ext/fluentqa-md/src/main/java/io/fluentqa/md/parser/FieldParseConfig.java new file mode 100644 index 0000000..03d280f --- /dev/null +++ b/components/fluent-ext/fluentqa-md/src/main/java/io/fluentqa/md/parser/FieldParseConfig.java @@ -0,0 +1,12 @@ +package io.fluentqa.md.parser; + +import lombok.Data; +import org.jsoup.nodes.Element; + +import java.util.function.Function; + +@Data +public class FieldParseConfig { + private String key; + private Function extractFunc; +} diff --git a/components/fluent-ext/fluentqa-md/src/main/java/io/fluentqa/md/parser/ParseConfig.java b/components/fluent-ext/fluentqa-md/src/main/java/io/fluentqa/md/parser/ParseConfig.java new file mode 100644 index 0000000..1b0d3b5 --- /dev/null +++ b/components/fluent-ext/fluentqa-md/src/main/java/io/fluentqa/md/parser/ParseConfig.java @@ -0,0 +1,22 @@ +package io.fluentqa.md.parser; + +import cn.hutool.core.util.ReflectUtil; +import lombok.Data; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +@Data +public class ParseConfig { + private List> configs =new ArrayList<>(); + private ConcurrentHashMap> configMap; + + public void flat(){ + for (FieldParseConfig config : configs) { + ReflectUtil.setFieldValue(this,config.getKey(),config); + } + } +} diff --git a/components/fluent-ext/fluentqa-md/src/main/java/io/fluentqa/md/parser/awesome/AwesomeListParserConfig.java b/components/fluent-ext/fluentqa-md/src/main/java/io/fluentqa/md/parser/awesome/AwesomeListParserConfig.java new file mode 100644 index 0000000..f5388cd --- /dev/null +++ b/components/fluent-ext/fluentqa-md/src/main/java/io/fluentqa/md/parser/awesome/AwesomeListParserConfig.java @@ -0,0 +1,14 @@ +package io.fluentqa.md.parser.awesome; + +import io.fluentqa.md.parser.FieldParseConfig; +import lombok.Data; + +@Data +public class AwesomeListParserConfig { + private FieldParseConfig category; + private FieldParseConfig name; + private FieldParseConfig url; + private FieldParseConfig desc; + private FieldParseConfig additional; + +} diff --git a/components/fluent-ext/fluentqa-md/src/main/java/io/fluentqa/md/parser/awesome/AwesomeModel.java b/components/fluent-ext/fluentqa-md/src/main/java/io/fluentqa/md/parser/awesome/AwesomeModel.java new file mode 100644 index 0000000..ead20ce --- /dev/null +++ b/components/fluent-ext/fluentqa-md/src/main/java/io/fluentqa/md/parser/awesome/AwesomeModel.java @@ -0,0 +1,12 @@ +package io.fluentqa.md.parser.awesome; + +import lombok.Data; + +@Data +public class AwesomeModel { + private String category; + private String url; + private String name; + private String desc; + +} diff --git a/components/fluent-ext/fluentqa-md/src/main/java/io/fluentqa/md/parser/awesome/MarkdownAwesomeListParser.java b/components/fluent-ext/fluentqa-md/src/main/java/io/fluentqa/md/parser/awesome/MarkdownAwesomeListParser.java new file mode 100644 index 0000000..8affe6d --- /dev/null +++ b/components/fluent-ext/fluentqa-md/src/main/java/io/fluentqa/md/parser/awesome/MarkdownAwesomeListParser.java @@ -0,0 +1,46 @@ +package io.fluentqa.md.parser.awesome; + +import com.vladsch.flexmark.html.HtmlRenderer; +import com.vladsch.flexmark.parser.Parser; +import com.vladsch.flexmark.util.ast.Node; +import io.fluent.builtin.JavaProjectFileUtils; +import org.jsoup.Jsoup; +import org.jsoup.nodes.Document; +import org.jsoup.nodes.Element; + +import java.io.File; +import java.nio.charset.Charset; +import java.util.List; +import java.util.stream.Collectors; + +public class MarkdownAwesomeListParser { + + private Node parseMarkdownDoc(String mdFilePath){ + String filePath = JavaProjectFileUtils.getFilePath(mdFilePath); + String mdStr = JavaProjectFileUtils.readString(new File(filePath), Charset.defaultCharset()); + Parser parser = Parser.builder().build(); + return parser.parse(mdStr); + } + + private String renderToHtml(Node doc){ + HtmlRenderer renderer = HtmlRenderer.builder().build(); + return renderer.render(doc); + } + + private String toHtml(String mdFilePath){ + return renderToHtml(parseMarkdownDoc(mdFilePath)); + } + public List transform(String path){ + String htmlStr = toHtml(path); + Document htmlDocs = Jsoup.parse(htmlStr); + List elementList= htmlDocs.select("ul>li"); + return elementList.stream().map(element -> { + AwesomeModel awesome = new AwesomeModel(); + awesome.setCategory(element.parent().previousSibling().previousSibling().childNode(0).toString()); + awesome.setName(element.selectFirst("a").text()); + awesome.setDesc(element.text()); + awesome.setUrl(element.selectFirst("a").attr("href")); + return awesome; + }).collect(Collectors.toList()); + } +} diff --git a/components/fluent-ext/fluentqa-md/src/test/java/io/fluentqa/md/parsers/MarkdownAwesomeListParserTest.java b/components/fluent-ext/fluentqa-md/src/test/java/io/fluentqa/md/parsers/MarkdownAwesomeListParserTest.java new file mode 100644 index 0000000..0c0aa5a --- /dev/null +++ b/components/fluent-ext/fluentqa-md/src/test/java/io/fluentqa/md/parsers/MarkdownAwesomeListParserTest.java @@ -0,0 +1,88 @@ +package io.fluentqa.md.parsers; + +import cn.hutool.json.JSONUtil; +import com.vladsch.flexmark.ast.BulletList; +import com.vladsch.flexmark.ast.BulletListItem; +import com.vladsch.flexmark.ast.Heading; +import com.vladsch.flexmark.html.HtmlRenderer; +import com.vladsch.flexmark.parser.Parser; +import com.vladsch.flexmark.util.ast.Node; +import io.fluentqa.builtin.project.JavaProjectUtils; +import io.fluentqa.md.parser.awesome.AwesomeModel; +import io.fluentqa.md.parser.awesome.MarkdownAwesomeListParser; +import org.jsoup.Jsoup; +import org.jsoup.nodes.Document; +import org.jsoup.nodes.Element; +import org.junit.jupiter.api.Test; + +import java.io.File; +import java.nio.charset.Charset; +import java.util.List; + +public class MarkdownAwesomeListParserTest { + MarkdownAwesomeListParser parser = new MarkdownAwesomeListParser(); + private Node parseMarkdownDoc(String fileName){ + String filePath = JavaProjectUtils.getFilePath(fileName); + String mdStr = JavaProjectUtils.readString(new File(filePath), Charset.defaultCharset()); + Parser parser = Parser.builder().build(); + Node document = parser.parse(mdStr); + return document; + } + + private String renderToHtml(Node doc){ + HtmlRenderer renderer = HtmlRenderer.builder().build(); + return renderer.render(doc); + } + @Test + void testTransformByMarkdownNodes() { + Node document = parseMarkdownDoc("low-code-1.md"); + if(document.getFirstChild()==null) return; + Node nextNode = document.getFirstChild().getNext(); + while(nextNode!=null){ + if(nextNode instanceof Heading){ + if(((Heading) nextNode).getLevel()==3){ + System.out.println(((Heading) nextNode).getText()); + } + } + if(nextNode instanceof BulletList){ + System.out.println(nextNode.getChars()); + } + if(nextNode instanceof BulletListItem){ + System.out.println(nextNode.getChars()); + } + nextNode = nextNode.getNext(); + } + System.out.println(document); + } + //next sibling element: list + @Test + public void testTransformByXmlPath(){ + Node document = parseMarkdownDoc("low-code-1.md"); + String htmlStr = renderToHtml(document); + JavaProjectUtils.writeToFile("low-code.html",htmlStr); + Document htmlDocs = Jsoup.parse(htmlStr); + List elementList= htmlDocs.select("ul>li"); + for (Element element : elementList) { + System.out.println("category:"+element.parent().previousSibling().previousSibling().childNode(0).toString()); + System.out.println("url:"+element.selectFirst("a").attr("href")); + System.out.println("name:"+element.selectFirst("a").text()); + System.out.println("desc:"+element.text()); + } + } + @Test + public void testToHtml(){ + Node document = parseMarkdownDoc("test-resources.md"); + String htmlStr = renderToHtml(document); + JavaProjectUtils.writeToFile("test-resources.html",htmlStr); + } + +// @Test + public void testTransform(){ + for (int i = 3; i < 7 ; i++) { + List repos = parser.transform("low-code-%d.md".formatted(i)); + System.out.println(repos); + JavaProjectUtils.writeToFile("low-code-%d.json".formatted(i),JSONUtil.toJsonPrettyStr(repos)); + } + + } +} \ No newline at end of file diff --git a/components/fluent-ext/fluentqa-md/src/test/resources/low-code-1.md b/components/fluent-ext/fluentqa-md/src/test/resources/low-code-1.md new file mode 100644 index 0000000..4f78016 --- /dev/null +++ b/components/fluent-ext/fluentqa-md/src/test/resources/low-code-1.md @@ -0,0 +1,204 @@ +# Awesome-no-code-tools +This awesome list links relevant tools for required to make apps/sites/chatbot and any digital tools without code! + +I know that some of you are thinking "What is awesome without code? on Github???" But you never know when having such a tool might become handy. + +This list is based on the incredible work done by Louis Veyret & Clément Barberousse and published as a google sheet. I am saving it here as a safekeeping and to maintain it. +Originally published as +>Outils pour créer des sites web, applications mobiles, chatbot sans coder. +>Par Louis Veyret & Clément Barberousse +>Source : https://docs.google.com/spreadsheets/d/1QRhocTMg1cZAZyWz5vznqg6KdZrzU-b557Il8p0Q7HM/edit#gid=1754454108 + +# Awesome list +### Analytics +* [Simple Analytics](https://simpleanalytics.com/) - Simple, clean, and friendly analytics +* [Google Analytics](https://analytics.google.com) - Free website analytics + +### Automation +* [Zapier](https://zapier.com/) - Connect and automate 500+ web apps +* [Integromat](https://www.integromat.com/en/) - The glue of the internet +* [IFTTT](https://ifttt.com/) - Do more with the services you love +* [ActionDesk](https://www.actiondesk.io/) - Build powerful automations with your spreadsheet skills +* [Microsoft Flow](https://flow.microsoft.com/fr-fr/) - Automate tasks by integrating your favorite apps +* [Wayscript](https://wayscript.com) - A rapid scripting platform with drag-n-drop interface for Python and Javascript +* [Tray](https://tray.io/solutions/sales) - Advanced integration platform for connecting up the tools you use every day +* [Automate Io](https://automate.io/) - Put your business on autopilot. Connect 100+ business apps. +* [Blockspring](https://www.blockspring.com/) - Supercharge your list building, reporting, and landing pages. +* [Oplim](https://oplim.com/) - Custom tasks on your website with zero code +* [Diagram](https://www.ondiagram.com) - Nocode backend API builder with MongoDB and Firestore +* [Outfunnel](https://outfunnel.com/) - Keep customer data in sync across sales and marketing tools + +### Automation, Scrapers +* [Phantombuster](https://phantombuster.com/) - Marketplace of simple to use no-code APIs + +### Business Apps +* [Betty Blocks](https://www.bettyblocks.com) - No-code enterprise application development +* [AppSheet](https://www.appsheet.com) - Intelligent no-code app development platform +* [Quick Base](https://www.quickbase.com/) - Best way to manage data and automate processes, so you can accomplish more +* [Zoho Creator](https://www.zoho.com/fr/creator/) - Custom apps to run your business. +* [Calcapp](https://www.calcapp.net/) - Build apps with your spreadsheet skills + +### Chatbots +* [Manychat](https://manychat.com/) - Create a Messenger bot in minutes +* [It's Alive](https://itsalive.io/) - Create a Facebook bot in minutes +* [Chatfuel](https://chatfuel.com) - Create chatbots for your audience +* [Landbot](https://landbot.io/) - Lead generation landing page as chatbot +* [Botsify](https://botsify.com/) - Create your own automated chatbot online +* [Chatamo](https://chatamo.com/) - Create intelligent voice and chatbot for marketing and sales +* [Flow XO](https://flowxo.com/) - Create a chatbot with zero coding skills required +* [Smooch](https://smooch.io/) - Instantly deploy yout bots wherever users are +* [Rulai](https://rul.ai/) - AI Chatbot to deliver Scalable Self Service + +### Collaboration +* [Notion](https://www.notion.so) - All-in-one workspace - notes, tasks, wikis & databases +* [Trello](https://trello.com/louisveyret1/boards) - All-in-one workspace and collaboration for businesses + +### Collaboration, Internal +* [Quip](https://quip.com/) - One place for all your team's work + +### CRM +* [Salesflare](https://salesflare.com/) - Simple & powerful CRM for small businesses +* [Pipedrive](https://www.pipedrive.com/fr) - CRM Gestion de leads en pipeline + +### CRM, Marketing +* [Hubspot](https://www.hubspot.com/) - A full platform of marketing, sales, customer service and CRM software + +### Customer Support +* [Drift](https://www.drift.com/) - Customer support chatbot +* [Crisp](https://crisp.chat/fr/) - Customer support directly in your website + +### Customer Support, Marketing, CRM +* [Intercom](https://www.intercom.com/) - All-in-one customer support + +### Data, Marketing +* [Hotjar](https://www.hotjar.com/) - See how your visitors are really using your site + +### Database +* [Airtable](airtable.com) - Realtime spreadsheet database hybrid +* [NocoDB](https://github.com/nocodb/nocodb) - Free & Open Source Airtable alternative - turns any SQL database into smart spreadsheet +* [Trevor](https://trevor.io/) - Query your live data, without code + +### Design +* [Figma](https://www.figma.com/) - The first interface design tool with real-time collaboration +* [unDraw](https://undraw.co/) - Free, open-source illustrations for everyone + +### Design, Websites +* [Webflow](https://webflow.com) - All-in-one web design platform + +### Ecommerce +* [Shopify](https://fr.shopify.com/) - Build your ecommerce store +* [Podia](https://www.podia.com/fr/home) - Easily sell memberships, online courses and digital products +* [Monto](https://www.monto.io/) - Product reviews for Webflow +* [Hingeto](https://www.hingeto.com/) - Start your own Amazon-style marketplace +* [Volusion](https://www.volusion.com/) - Ecommerce website store & shopping cart software + +### Email +* [Revue](https://www.getrevue.co/) - Editorial newsletters tool for writers and publishers +* [Sendgrid](https://sendgrid.com/) - Email delivery service +* [Postcards](https://designmodo.com/postcards/) - Create awesome emails with drag & drop simplicity +* [BEE](https://beefree.io/) - Create beautiful emails, fast. +* [Stripo](https://stripo.email/fr/) - Free email template builder +* [Substack](https://substack.com/) - Paid newsletters made simple +* [Mailchimp](https://mailchimp.com/) - Free emailing software +* [Converkit](https://convertkit.com/) - Send automated emailing campaigns + +### Forms +* [Typeform](https://www.typeform.com/) - Build beautiful conversational forms +* [Google Forms](https://www.google.com/intl/fr/forms/about/) - Free forms from Google that connect directly to Google Sheets +* [Jotform](https://www.jotform.com/) - Online form builder & form creator +* [Paperform](https://paperform.co/) - Beautiful forms that feel like yours + +### Internal +* [Coda](https://coda.io/welcome) - Build docs as powerful as apps +* [Nuclino](https://www.nuclino.com) - Knowledge base and collaboration +* [Contractbook](https://contractbook.co/) - Efficient contract management + +### Internal, Web Apps +* [Retool](https://retool.com/) - Build custom internal tools in minutes + +### Landing Pages +* [Landen](https://www.landen.co/) - Beautiful Landing Pages. Designed Instantly +* [Launchaco](https://www.launchaco.com/) - Simple landing pages for your startup +* [Leadpages](https://www.leadpages.net/) - Landing page builder & lead gen software +* [Instapage](https://instapage.com) - Leanding pages, up to 6x more conversions +* [Unbounce](https://unbounce.com/) - Landing Pages - More Powerful Customization +* [Leeflets](https://leeflets.com/) - Functional landing pages for all kind of things +* [RIVYT](https://rivyt.com/) - Websites for Video Creators + +### Landing Pages, Websites +* [Carrd](https://carrd.co) - Build simple, fully responsive one-page sites + +### Marketing +* [Outgrow](https://outgrow.co/) - Boost your marketing with highly interactive content +* [Rewardful](https://www.getrewardful.com/) - Instant Affiliate & Referral Programs for Stripe +* [Fortvision](https://fortvision.com/) - Create interactive experiences that lead to higher conversions + +### Marketplace +* [Sharetribe](https://www.sharetribe.com) - Create your first marketplace without code + +### Membership, Websites +* [Memberstack](https://www.memberstack.io/) - Memberships & gated content for websites + +### Mobile Apps +* [Dropsource](https://www.dropsource.com/) - Build and publish native mobile app without coding +* [Glide](glideapps.com) - Create mobile apps from Google Sheets +* [Lightwell](https://lightwell.pro/) - A simple tool for creating native iOS apps on Mac. +* [Adalo](https://www.adalo.com) - Create apps as easy as making a slide deck +* [App Inventor](https://appinventor.mit.edu/) - Create powerful Android apps without code using blocs coding +* [Thunkable](https://thunkable.com) - Create beautiful and powerful mobile apps without code + +### Mobile Apps, Video Games +* [Buildbox](https://www.buildbox.com/) - Make amazing mobile games without coding +* [AppOnboard Studio](https://apponboard.com/studio/) - Where app ideas come to life. No code required. + +### Payment +* [Stripe](https://stripe.com/fr-us) - Payment integration and management +* [Paypal](http://paypal.com) - Send Money, Online or Set up a Merchant Store +* [Buy me a coffee](https://www.buymeacoffee.com/) - Easy way to support a projet + +### Payment, Ecommerce +* [Gumroad](https://gumroad.com/?locale=fr) - Sell anything directly to anyone + +### Payment, Membership +* [Patreon](https://www.patreon.com/) - Easy way to contribute to a project + +### Podcast +* [Anchor ](https://anchor.fm/) - The best way to create your podcast + +### Scrapers +* [Octoparse](https://www.octoparse.com/) - Easy web scraping for everyone +* [Parsehub](https://www.parsehub.com/) - Free web scraping +* [Dataminer](https://data-miner.io/) - Easy to use web scraping + +### Video +* [Loom](https://www.loom.com) - Seamless screen, mic, and camera recording for Chrome + +### Voice +* [Voiceflow](https://www.voiceflow.com/) - Build voice apps in your browser without coding +* [Vuix](https://vuix.io/) - Design voice apps in minutes +* [ApitoBot](https://apitobot.io/) - Create an Alexa Skill or Google Action in minutes + +### VR +* [Instavr](https://www.instavr.co/) - Make your VR apps in minutes + +### Web Apps +* [Bubble](http://bubble.is) - Build a fully functional web app without any code. +* [Corvid](https://www.wix.com/corvid) - Build advanced web applications, hassle-free +* [Boundless](https://www.boundlesslabs.com/) - Create dynamic, multisided web apps without coding + +### Websites +* [Sheet2site](https://www.sheet2site.com/) - Turn your Google Sheets into a website +* [Universe](https://apps.apple.com/us/app/universe-website-builder/id1211437633) - Make an awesome website from your phone +* [Table2Site](https://table2site.com) - Generate websites from your Airtable base +* [Squarespace](https://fr.squarespace.com/) - All-in-one platform to build a beautiful online e-commerce +* [Wix](https://fr.wix.com/) - Free website builder +* [IM Creator](https://www.imcreator.com/) - Free website builder +* [Weebly](https://www.weebly.com/?lang=fr) - Build a free website or online store +* [Webnode](https://www.webnode.fr/) - Easy & Free website maker +* [Jimdo](https://www.jimdo.com/fr/) - Your website builder +* [Bookmark](https://www.bookmark.com/) - Create a Website with AI +* [Strikingly](https://www.strikingly.com/) - Make a website in minutes +* [Tilda](https://tilda.cc/) - Create beautiful websites without any code + +### Websites, Membership +* [Memberspace](https://www.memberspace.com/) - Turn your audience into paying members. diff --git a/components/fluent-ext/fluentqa-md/src/test/resources/low-code-2.md b/components/fluent-ext/fluentqa-md/src/test/resources/low-code-2.md new file mode 100644 index 0000000..bb2cd32 --- /dev/null +++ b/components/fluent-ext/fluentqa-md/src/test/resources/low-code-2.md @@ -0,0 +1,172 @@ +# Awesome low-code! + +[![Awesome](https://cdn.rawgit.com/sindresorhus/awesome/d7305f38d29fed78fa85652e3a63e154dd8e8829/media/badge.svg)](https://github.com/antdimot/awesome-lowcode) + +A collection of Awesome low-code development platform ([LCDP](https://en.wikipedia.org/wiki/Low-code_development_platform)). +Everyone is welcome to submit their new Awesome low-code item. + +# License + +[![CC0](https://licensebuttons.net/p/zero/1.0/88x31.png)](https://creativecommons.org/publicdomain/zero/1.0/) + + +# Table of Contents + +- [Awesome low-code!](#awesome-low-code) +- [License](#license) +- [Table of Contents](#table-of-contents) + - [Automation](#automation) + - [Educational](#educational) + - [Flow-based programming](#flow-based-programming) + - [Infrastructure](#infrastructure) + - [Machine Learning](#machine-learning) + - [Marketing](#marketing) + - [Online database creator apps](#online-database-creator-apps) + - [Visual programming](#visual-programming) + - [Misc](#misc) + +## Automation + +* [Appian](https://www.appian.com/) - Discover the power of low-code automation. +* [Automate.io](https://automate.io) - Connect your cloud apps. +* [Axiom](https://axiom.ai/) - Browser automation. Quickly, without code. +* [Blink](https://www.blinkops.com) - No-code automation for CloudOps. +* [Camunda](https://camunda.com/) - Automate Any Process, Anywhere. +* [Data Fetcher for Airtable](https://datafetcher.com/) - Connect Airtable to any API using the Data Fetcher app. +* [Make](https://www.make.com) - Make lets you design, build, and automate anything from tasks and workflows to apps and systems. +* [OneSimpleAPI](https://onesimpleapi.com/) - A toolbox with all the things you need to get your no-code project to success: PDF generation, Currency Exchange, QR codes, Screenshots, and more. +* [Phantombuster](https://phantombuster.com/) - Code free automations and data extraction. +* [Reflect](https://reflect.run/) - Automated regression tests without a line of code. +* [Stackby](https://stackby.com/) - Automate workflows, build custom tools, collaborate with your team. +* [tines](https://www.tines.com/) - No-code automation for security teams. +* [Uipath](https://www.uipath.com/) - We make robots so people don’t have to be robots. + +## Educational + +* [Doc Willianms](https://www.youtube.com/channel/UCXv_CS0DaUVS25tFGkRALoA) - No Code tutorials. +* [Markerpad](https://www.makerpad.co/) - Join thousands learning to build software. No coding required. + +## Flow-based programming + +* [AppFlow](https://aws.amazon.com/appflow/) - Securely integrate apps and automate data flows at any scale, without code. +* [Bravo Studio](https://www.bravostudio.app/) - Bravo’s powerful no-code approach to mobile app development. +* [Funnel](https://funnel.io/) - All your marketing and advertising data where you want it. +* [Hookdeck](https://hookdeck.com/) - Never miss a webhook. +* [Ifttt](https://ifttt.com/) - Helps your apps and devices work together in new ways. +* [Impira](https://www.impira.com/) - Grab data from any document in seconds with Impira’s no-code platform powered by machine learning. +* [joonbot](https://joonbot.com/) - Make a chatbot in minutes with our intuitive no-code chatbot builder. +* [Kissflow](https://kissflow.com) - The full spectrum of work on one platform. +* [Memberstack](https://www.memberstack.com/) - Authentication & payments for companies who love Webflow, Stripe, & React. +* [n8n.io](https://n8n.io/) - Extendable workflow automation. +* [Node-RED](https://nodered.org/) - A programming tool for wiring together hardware devices, APIs and online services in new and interesting ways. +* [Parabola](https://parabola.io/) - Hand off your routine data tasks by describing them in Parabola. Build once, reuse infinitely. +* [Pipedream](https://pipedream.com/) - Connect APIs, remarkably fast with no code. And with code-level control when you need it. +* [Runnable](https://getrunnable.com/) - A low-code framework for building user-facing internal workflows. +* [Stately](https://stately.ai/) - The ideal state of visual application logic. +* [Structr](https://structr.com) - The visualization of the data and program structures as a graph accelerates the development and makes the results easily comprehensible for everyone at any time. +* [Wayscript](https://wayscript.com) - A rapid scripting platform for developers. +* [Zapier](https://zapier.com) - Connect your apps and automate workflows. + +## Infrastructure + +* [harpoon](https://www.harpoon.io/) - Deploy software with No Code Kubernetes. + +## Machine Learning + +* [Accern](https://accern.com) - Accelerate AI Workflows for Financial Services. +* [AI Builder](https://flow.microsoft.com/en-us/ai-builder/) - Bring intelligent automation to your business processes with AI that’s easy to train and configure in Power Automate. +* [Alteryx](https://www.alteryx.com/products/alteryx-platform/machine-learning) - Scale data science across your business with automated machine learning (AutoML). +* [Dataiku](https://www.dataiku.com/product/key-capabilities/machine-learning) - Build advanced machine learning models using the latest techniques. +* [DataRobot](https://www.datarobot.com/platform/visual-ai/) - DataRobot Automated Machine Learning with Visual AI. +* [Gravity-AI](https://www.gravity-ai.com/) - The fastest & most secure way to solve business problems with A.I. +* [h2o](https://www.h2o.ai/) - Get free, hands-on experience with the H2O AI Hybrid Cloud. +* [Jasper](https://www.jasper.ai/) - Artificial intelligence makes it fast & easy to create content for your blog, social media, website, and more! +* [Knime](https://www.knime.com/knime-analytics-platform) - Creating Data Science. +* [RapidMiner](https://rapidminer.com/products/studio/) - Comprehensive data science platform with visual workflow design and full automation. +* [Noogata](https://noogata.com/) - AI platform gives companies the impact of data science without the burden of development or the limitations of out-of-the-box solutions. +* [SaegMaker](https://aws.amazon.com/sagemaker/) - Machine learning for every data scientist and developer. +* [Sas](https://www.sas.com/en_si/software/machine-learning-cloud.html) - On-demand programming access to machine learning algorithms in the cloud. +* [Vertex-AI](https://cloud.google.com/vertex-ai) - Build, deploy, and scale machine learning (ML) models faster, with fully managed ML tools for any use case. + +## Marketing + +* [AppSumo](https://appsumo.com/) - Discover, buy, & sell the products you need to grow your business. +* [Bannerbear](https://www.bannerbear.com/) - Auto-generate social media visuals, ecommerce banners, dynamic email images and more with our API and integrations. +* [Klaviyo](https://www.klaviyo.com/) - Ecommerce marketing automation platform. + +## Online database creator apps + +* [Airtable](https://airtable.com/) - Part spreadsheet, part database, and entirely flexible, teams use Airtable to organize their work, their way. +* [Amplication](https://amplication.com/) - Build production-ready Node.js applications without wasting time on repetitive coding. +* [Baserow](https://baserow.io/) - Open source no-code database and Airtable alternative. +* [Caspio](https://www.caspio.com/) - Building online database applications without coding. +* [Claris](https://www.claris.com/) - Quickly build custom apps yourself that you can’t find anywhere else. +* [Coda](https://coda.io/) - All-in-one doc. +* [Hasura](https://hasura.io/) - From your databases to a unified GraphQL API in just one minute. +* [NocoDB](https://nocodb.com/) - NocoDB is an open source #NoCode platform that turns any database into a smart spreadsheet. +* [Retool](https://retool.com/) - Retool cuts the time it takes to build internal tools in half so you can focus on your customers. +* [Rows](https://rows.com/) - The spreadsheet with superpowers. +* [Supabase](https://supabase.com/) - The Open SourceFirebase Alternative. + +## Visual programming + +* [Adalo](https://www.adalo.com/) - Turn Your Amazing App Concept Into Reality Without Coding! +* [Appbase.io](https://www.appbase.io) - Elasticsearch supercharged. +* [AppSheet](https://www.appsheet.com/) - The fastest way to build apps and automate work. +* [Appsmith](https://www.appsmith.com/) - A powerful open source framework to build internal tools. +* [Appwrite](https://appwrite.io/) - Secure Open-Source Backend Server for Web, Mobile & Flutter Developers. +* [AWS Application Composer](https://aws.amazon.com/application-composer/) - Visually design and build serverless applications quickly. +* [Bildr](https://www.bildr.com) - Open-ended, extensible, collaboration-focused website and web app builder. +* [Boundlesslabs](https://www.boundlesslabs.com/) - Boundless lets you build the web site of your dreams. No code required. +* [bubble](https://bubble.io/) - A code-free programming language that lets you build and host web applications without engineers. +* [Carrd](https://carrd.co/) - Simple, free, fully responsive one-page sites for pretty much anything. +* [Cloudscape](https://cloudscape.design/) - An open source design system for the cloud. +* [Dronahq](https://www.dronahq.com) - Build business apps without coding. +* [Heyflow](https://heyflow.app/) - Build interactive flows. +* [Glide](https://www.glideapps.com/) - Create an app from a Google Sheet in five minutes, for free. +* [Growform](https://www.growform.co/) - The Multi Step Form Builder that Gets You More Leads. +* [Honeycode](https://www.honeycode.aws/) - Build a better way to work. +* [Insomnia](https://insomnia.rest) - Build APIs that work. +* [Jotform App](https://www.jotform.com/products/apps/) - Create apps for your business. +* [Mendix](https://www.mendix.com/) - Accelerate enterprise app development. +* [Outsystems](https://www.outsystems.com/) - Build Applications Fast, Right, and for the Future. +* [Plasmic](https://www.plasmic.app/) - The visual builder for your tech stack. +* [Potion](https://www.potion.so/) - Create custom websitesin minutes. All on [Notion](https://www.notion.so/). +* [Power Apps](https://powerapps.microsoft.com) - Create the high productivity apps you need for your business with an advanced set of tools. +* [Quarkly](https://quarkly.io) - Design tool for creating websites and web apps. +* [Quickbase](https://www.quickbase.com) - Application development platform that unites business and IT teams. +* [Sanity](https://www.sanity.io/) - The unified content platform. +* [SAP Build](https://www.sap.com/products/technology-platform/low-code.html) - Create apps, automate processes, and design business sites with drag-and-drop simplicity. +* [Shuffle](https://shuffle.dev/) - Create teamplate in minutes. +* [Softr](https://www.softr.io) - From zero to a website in 5 minutes, using building blocks. +* [Stacker](https://stacker.app) - Turn your spreadsheets into applications. +* [Storybook](https://storybook.js.org) - Build component driven UIs faster. +* [Super](https://super.so) - Build websites with the simplicity of Notion. +* [Typedream](https://typedream.com) - The new way to make a website. +* [Versoly](https://versoly.com/) - The no-code website builder that everyone loves to use. +* [Webflow](https://webflow.com) - Build better business websites, faster. Without coding. +* [Wized](https://www.wized.io) - Rapidly build real web applications without coding. + + +## Misc + +* [Algolia](https://www.algolia.com/) - Flexible Search & Discovery Hosted APIs. +* [Autocode](https://autocode.com) - New user notifications. Purchase alerts. Scheduled jobs. SQL queries. +* [Craftar](https://www.craftar.io) - Build APIs with NoCode at Lightning Speed. +* [Doppler](https://www.doppler.com/) - Sync environment variables at scale. +* [Fibery](https://fibery.io) - Build your own workspace. +* [Getstream](https://getstream.io) - Stream powers Chat Messaging and Activity Feeds for billions of global end-users across thousands of different apps. +* [Linx](https://linx.software) - General-purpose low-code platform for building custom backends APIs, automations and integrations +* [Makerpad](https://www.makerpad.co/) - Build tools & automate at work without code. +* [NoCodeAPI](https://nocodeapi.com/) - The easiest way to connect with APIs. +* [placeid](https://placid.app/) - Generate your social share images automatically. +* [SaaS Blocks](https://saasblocks.io/) - Ready-to-use building blocks and APIs to take your SaaS application to the next level +* [Screenshot](https://www.screenshotapi.net/) - Programmatic Screenshots of Any Website in Seconds. +* [Shopify](https://shopify.com/) - Build your business. +* [Simplescraper](https://simplescraper.io/) - Extract data from any website in seconds. +* [Stripe](https://stripe.com) - The new standard in online payments. +* [ToolJet](https://github.com/ToolJet/ToolJet) - Low-code framework for building internal tools. +* [Vantiq](https://vantiq.com/) - The Only Low Code Platform for Real Time Systems. +* [Voiceflow](https://www.voiceflow.com/) - Design, prototype and build voice apps. +* [Zendesk](https://www.zendesk.com/) - Build the best customer experiences. + diff --git a/components/fluent-ext/fluentqa-md/src/test/resources/low-code-3.md b/components/fluent-ext/fluentqa-md/src/test/resources/low-code-3.md new file mode 100644 index 0000000..2d7ede1 --- /dev/null +++ b/components/fluent-ext/fluentqa-md/src/test/resources/low-code-3.md @@ -0,0 +1,200 @@ + +# Awesome Low Code [![Awesome](https://awesome.re/badge.svg)](https://awesome.re) + +> A curated list of Awesome Low Code platforms, vendors, tools and resources. + +> Low Code platforms provide a development and runtime environment used to create all kinds of software application through an intuitive experience, with minimal to no coding skills requires. + + +## Contents + +- [Awesome Low Code ](#awesome-low-code-) + - [Contents](#contents) + - [Platforms](#platforms) + - [Citizen Automation and Development Platform](#citizen-automation-and-development-platform) + - [Low Code Application Platform](#low-code-application-platform) + - [Business Process Management](#business-process-management) + - [Robotic Process Automation](#robotic-process-automation) + - [Intelligent Virtual Agent](#intelligent-virtual-agent) + - [Integration Platform as a Service](#integration-platform-as-a-service) + - [Low Code API Management Platform](#low-code-api-management-platform) + - [Tools, Extensions and Frameworks](#tools-extensions-and-frameworks) + - [Power Platform (Microsoft)](#power-platform-microsoft) + - [Reference Resources](#reference-resources) + - [Power Platform (Microsoft)](#power-platform-microsoft-1) + - [Workato](#workato) + - [Learning Resources](#learning-resources) + - [Power Platform (Microsoft)](#power-platform-microsoft-2) + - [Workato](#workato-1) + - [Samples, Templates and Solutions](#samples-templates-and-solutions) + - [Power Platform (Microsoft)](#power-platform-microsoft-3) + - [Workato](#workato-2) + - [Community](#community) + - [Power Platform (Microsoft)](#power-platform-microsoft-4) + - [Workato](#workato-3) + - [Blogs](#blogs) + - [Power Platform (Microsoft)](#power-platform-microsoft-5) + - [Workato](#workato-4) + - [Other Lists](#other-lists) + - [Power Platform (Microsoft)](#power-platform-microsoft-6) + +## Platforms + +### Citizen Automation and Development Platform + +A development platform for business users (citizen developer is a term for business users, not a role or a job title) that doesn't require coding skills and is based on intuitive drag & drop interfaces. Applications created in such platforms are usually made to automate or improve efficiency of business processes and of personal productivity, without going through IT. CADP are usually consumed as SaaS. + +- [Power Automate (Microsoft)](https://flow.microsoft.com/) - An online workflow service that automates actions across the most common apps and services. +- [Zapier](https://zapier.com/) - Allows its users to easily connect and automate the apps they use. +- [Einstein Automate (Salesforce)](https://www.salesforce.com/products/platform/einstein-automate/) - Empower your employees to do more of what matters by automating business processes easily without needing specialized development skills. +- [Jira Automation (Atlassian)](https://www.atlassian.com/software/jira/features/automation) - Automation is a No Code rule builder that enables customers to build if-this-then-that-rules based on events in Jira. +- [Trello Power-Ups (Atlassian)](https://trello.com/power-ups/category/automation) - Helps teams meet their unique business needs through adaptable features and integrations. +- [Flow (Zoho)](https://www.zoho.com/flow/) - An integration platform that helps you connect your apps without any code. + +### Low Code Application Platform + +An advanced development platform that enable organizations to create powerful enterprise grade applications with no to minimum extra coding requirements with easy to use drag & drop interfaces. Since such platforms simplify the application development process, more types of personas can contribute and accelerate the development process. Those platforms are PaaS development platforms, and can also reduce development cost and maintenance. + +- [Power Apps (Microsoft)](https://powerapps.com/) - Build apps in hours—not months—that easily connect to data, use Excel-like expressions to add logic, and run on the web, iOS, and Android devices. +- [Power BI](https://powerbi.microsoft.com/) - Unify data from many sources to create interactive, immersive dashboards and reports that provide actionable insights and drive business results. +- [Appian](https://appian.com/) - Provides a Low Code software development platform that enables organizations to rapidly develop powerful applications. +- [Mendix](https://mendix.com/) - The fastest and easiest high-productivity platform to create and continuously improve multi-channel applications at scale. +- [OutSystems](https://www.outsystems.com/) - A Low Code platform that enables businesses to develop, deploy, and manage enterprise-grade apps. +- [Now Platform (ServiceNow)](https://www.servicenow.com/now-platform.html) - Drive connected digital workflows across the enterprise, deliver modern, consumer-like experiences, and accelerate time-to-value and innovation. +- [Creator (Zoho)](https://www.zoho.com/creator/low-code-platform/) - Build applications from scratch without having to write endless lines of code. +- [BettyBlocks](https://www.bettyblocks.com/) - The #1 No Code platform for innovation, agility and empowerment. Used to create mobile, business and web applications at lightning speed. +- [APEX (Oracle)](https://apex.oracle.com/en/platform/low-code/) - A Low Code development platform that enables you to build scalable, secure enterprise apps, with world-class features, that can be deployed anywhere. +- [Salesforce Platform, prev. Force.com (Salesforce)](https://www.salesforce.com/products/platform) - Click, create, and ship from anywhere with Low Code. +- [n8n](https://n8n.io/) - Workflow automation tool with many integrations and with fair-code license. + +### Business Process Management + +A Low Code Application Platform dedicated to streamlining business processes. These platforms enable business users to automate complicated business workflows and actions with no coding background by providing an easy to use drag & drop interface. Automations that are built in such platforms are usually built in an event-driven mode (triggers) around critical business processes. BPA can be consumed via a SaaS or an on-premises appliance. + +- [PegaSystems](https://www.pega.com/) - Provides business process and customer relationship management solutions for organizations. +- [AgilePoint](https://agilepoint.com/) - Deploy business-changing ideas in minutes, not months, with the AgilePoint digital process automation platform. +- [QuickBase](https://www.quickbase.com/) - Helps businesses quickly turn ideas about better ways to work into apps that make them more efficient, informed, and productive. +- [Creatio](https://www.creatio.com/) - A global software company providing a leading Low Code platform for process management and CRM. +- [AuraQuantic](https://www.auraquantic.com/) - A digital platform designed for business users to easily and rapidly build unlimited processes and applications. +- [Kintone](https://www.kintone.com/) - The best productivity software to business transformation Platform. +- [ProntoForms](https://www.prontoforms.com/) - Provides mobile business solutions to automate field sales, field service, and field data collection. +- [TrackVia](https://trackvia.com/) - The leading Low Code workflow platform for operations. +- [NewGen](https://newgensoft.com/) - Simplify your complex, content-driven business needs with one comprehensive Low Code platform. + +### Robotic Process Automation + +An automation platform that helps organizations remove human manual intensive processes and avoid errors, as well as making sure human required attention is efficiently maximized only on critical aspects of work. RPA technology introduced the concept of software robots, built by the end-user humans, to perform repetitive manual intensive processes in an automation fashion, and can understand and processes computer interactions with SaaS and on-premises applications just like a human-being. RPA technologies involve building, deploying, and managing those software robots. + +- [Power Automate Desktop (Microsoft)](https://powerautomate.microsoft.com/en-us/robotic-process-automation/) - Automate everything from simple data transfers to complex business workflows—directly from your desktop—using RPA desktop flows in Power Automate Desktop. +- [Servicetrace RPA (Salesforce)](https://www.servicetrace.com/) - Develop innovation in robotic solutions. +- [Appian RPA](https://appian.com/platform/complete-automation/robotic-process-automation-rpa.html) - Orchestrate RPA bots with people, systems, and data in a single workflow, scaling automation across your entire organization. +- [Workato RPA](https://www.workato.com/modern-rpa) - Integration-powered RPA for Intelligent Automation. + +### Intelligent Virtual Agent + +A software application which is built and configured by its users to perform manual repetitive and error-prone tasks in an automated faster fashion. Bots are built and configured mostly in Low Code platforms via easy to use drag & drop interfaces. Examples to the use of bots could be seen in user conversation via messaging and voice platforms that help them take decisions and act through business processes. + +- [Power Virtual Agents (Microsoft)](https://powervirtualagents.microsoft.com/) - Lets you create powerful chatbots that can answer questions posed by your customers, other employees, or visitors to your website or service. +- [Workato Workbot](https://docs.workato.com/workbot/overview.html) - A bot platform that allows you to build customizable workflows. + +### Integration Platform as a Service + +A platform that help organizations control, simplify and standardize the way that applications are integrated (internally developed or 3rd party SaaS). Such platforms help to share data between applications, automate business workflows and remove manual error prone ones, in an advanced controlled manner. iPaaS also enables more types of personas to integrate applications, removing the constant dependency on software developers. iPaaS can be deployed within an organization either as a SaaS or as on-premises appliance. + +- [Azure Logic Apps (Microsoft)](https://azure.microsoft.com/en-us/services/logic-apps/) - A cloud-based platform for creating and running automated workflows that integrate your apps, data, services, and systems. +- [MuleSoft (Salesforce)](https://mulesoft.com/) - Provides an integration and API platform that makes it easy to connect data from any system to create connected experiences. +- [Workato](https://www.workato.com) - An enterprise automation platform that helps organizations work faster and smarter without compromising governance and security. + +### Low Code API Management Platform + +A Low Code platform which supports full lifecycle API management, including creation, management and monitoring of API endpoints. + +- [MuleSoft](https://www.mulesoft.com/platform/api-management) - Manage your API lifecycle, quickly design, test, and publish APIs. +- [Workato API Management](https://docs.workato.com/api-management.html) - Turn callable recipes into endpoints and organize the endpoints into API collections, making it easier for users to find and consume the endpoints through other recipes or third-party apps, without requiring access to your Workato account. + + +## Tools, Extensions and Frameworks + +### Power Platform (Microsoft) + +- [XrmToolBox](https://github.com/MscrmTools/XrmToolBox) - An application that gather multiple tools to ease the customization and configuration of Microsoft Dynamics CRM/365/Dataverse/PowerApps. +- [Levelup for Dynamics CRM](https://github.com/rajyraman/Levelup-for-Dynamics-CRM) - Chrome, Edge Chromium and Firefox Extension for Dynamics CRM/365/Power Apps Power users. +- [Power Platform Adoption Framework](https://github.com/PowerPlatformAF/PowerPlatformAF) - The framework that enables people to create beautiful and useful things on Power Platform deployed in large, enterprise-grade organizations. +- [Flow & Power Apps Migrator](https://github.com/Zerg00s/FlowPowerAppsMigrator) - Converts SharePoint Data sources for the MS Flow and PowerApps to a new tenant of your choice. +- [SharePoint Workflow Converter](https://github.com/TracyGH/SharePointWorkflowConverter) - A proof-of-concept C# console application for retrieving legacy 2010 & 2013 custom SharePoint workflow definition files, and creating new Power Automate flows programmatically. + +## Reference Resources + +### Power Platform (Microsoft) + +- [Power Platform Connectors](https://github.com/microsoft/PowerPlatformConnectors) - This is a repository for Microsoft Power Automate, Power Apps, and Azure Logic Apps connectors. +- [Microsoft Power Fx](https://github.com/microsoft/Power-Fx) - Power Fx Low Code programming language. + +### Workato + +- [Custom Connector Docs](https://github.com/workato/custom_connector_docs) - Source files for Workato custom connector documentation. + +## Learning Resources + +### Power Platform (Microsoft) + +- [Power Fx Samples](https://github.com/pnp/powerfx-samples) - This repository contains samples for Power Fx Low Code programming language. +- [Power Apps & Azure Lab](https://github.com/microsoft/PowerApps-Azure-Lab) - Repository to host the PowerApps Azure Lab. +- [PL-900: Power Platform Fundamentals](https://github.com/MicrosoftLearning/PL-900-Microsoft-Power-Platform-Fundamentals) - Power Platform Fundamentals course materials. + +### Workato + +- [Embedding Guide](https://github.com/workato/full-embed-sample) - A guided example on how to use Workato embedded. + +## Samples, Templates and Solutions + +### Power Platform (Microsoft) + +- [Power Apps Samples](https://github.com/pnp/powerapps-samples) - Contains curated community Microsoft Power App samples. +- [PowerApps Samples](https://github.com/Eickhel/PowerApps-samples) - Power Apps samples by Power Nimbus. +- [Power Apps Branding Template](https://github.com/iAmManCat/PowerApps-Branding-Template) - A template to empower developers and reduce time wasted on control changes. +- [SharePoint Power Platform Solutions](https://github.com/pnp/sp-power-platform-solutions) - Sample PowerApps solutions designed to be used in SharePoint context. +- [Power Automate Samples](https://github.com/pnp/powerautomate-samples) - Contains curated community samples for Microsoft Power Automate. +- [Automatic travel time](https://github.com/wortell/PowerAutomate-AutomatischeReistijd) - Automatic travel time in your Office 365 calendar. +- [Message Center in Teams](https://github.com/ericsche/MCinTeams) - Message Center in Teams is a simple PowerAutomate Solution to gather Message Center Announcement and post them in a Teams Channel. +- [Consume Power BI](https://github.com/ferrybouwman/Power-BI-Read-Only-REST-API) - Solution based on either Powershell or Power Automate (Flow) to consume the recently released Power BI Asynchronous Unified Scanning API. +- [Post List Item To Twitter](https://github.com/vaibhav21791/PostListItemToTwitter) - A Microsoft Power Automate Flow to Post a SharePoint List Item to Twitter along with media content. + +### Workato + +- [Solution Marketplace](https://www.workato.com/solutions) - A curated list of ready-to-use solutions built by Workato and vendors. +- [Support History](https://support.workato.com/en/support/solutions) - A public repository of resolved support tickets to help tackle issues. + +## Community + +### Power Platform (Microsoft) + +- [Microsoft Power Apps Official Community](https://powerusers.microsoft.com/t5/Power-Apps-Community/ct-p/PowerApps1) +- [Microsoft Power Automate Official Community](https://powerusers.microsoft.com/t5/Microsoft-Power-Automate/ct-p/MPACommunity) +- [Microsoft Power Virtual Agents Official Community](https://powerusers.microsoft.com/t5/Power-Virtual-Agents-Community/ct-p/PVACommunity) +- [Microsoft Power BI Official Community](https://community.powerbi.com/) +- [PowP.Co Discord Community](https://powp.co/) - A Discord community of Power Platform enthusiasts. + +### Workato + +- [Workato Communities](https://community.workato.com/) - The official Workato communities website. +- [Systematic](https://systematic.workato.com/) - The only community for business systems. + +## Blogs + +### Power Platform (Microsoft) + +- [Zenity](https://zenity.io/blog) - Low Code security and governance. +- [Addressing the Low Code Security Elephant in the Room](https://www.darkreading.com/edge-articles/addressing-the-low-code-security-elephant-in-the-room) - The shared responsibility model for Low Code applications. +- [PowPco](https://blog.powp.co/) - Single-stop community for everything Power Platform Community related. + +### Workato + +- [The Connector](https://www.workato.com/the-connector/) - Workato blog on Business Automation. + +## Other Lists + +### Power Platform (Microsoft) + +- [Awesome Microsoft Power Platform](https://github.com/Power-Maverick/awesome-power-platform) - A collection of awesome things regarding the Power Platform ecosystem. +- [Awesome No Code Low Code](https://github.com/valentin-vogel/awesome-nocode-lowcode) - A collection of awesome No Code and Low Code resources. diff --git a/components/fluent-ext/fluentqa-md/src/test/resources/low-code-4.md b/components/fluent-ext/fluentqa-md/src/test/resources/low-code-4.md new file mode 100644 index 0000000..67c07d3 --- /dev/null +++ b/components/fluent-ext/fluentqa-md/src/test/resources/low-code-4.md @@ -0,0 +1,241 @@ +# Awesome Nocode / Lowcode [![Awesome](https://awesome.re/badge.svg)](https://awesome.re) + +> A curated list of nocode and lowcode ressources for building software without code. +> Your [contributions](https://github.com/valentin-vogel/awesome-nocode-lowcode/blob/main/contributing.md) are welcome! + +Nocode enables programmers and non-programmers to create application software through graphical user interfaces instead of traditional code programming. Lowcode is a very closely related topic to allow strong customization. + +Not sure, if awesome or not? [Add to under consideration list](https://github.com/valentin-vogel/awesome-nocode-lowcode/blob/main/under-consideration.md). + +## Contents + +- [Awesome Nocode / Lowcode ](#awesome-nocode--lowcode-) + - [Contents](#contents) + - [Enterprise Platforms](#enterprise-platforms) + - [Automation and Workflows](#automation-and-workflows) + - [Forms](#forms) + - [Internal](#internal) + - [Apps](#apps) + - [Landing Pages](#landing-pages) + - [Websites](#websites) + - [Portfolios](#portfolios) + - [Membership](#membership) + - [Databases](#databases) + - [Chatbots](#chatbots) + - [Machine Learning](#machine-learning) + - [Games](#games) + - [Scraper](#scraper) + - [More (Uncategorized)](#more-uncategorized) +- [Under Consideration](#under-consideration) + - [Awesome or not?](#awesome-or-not) + - [In alpha or beta version](#in-alpha-or-beta-version) + +## Enterprise Platforms + +- [Appian](https://www.appian.com/) - Full-Stack automation and data from everywhere. A lowcode platform, fast and simple. +- [Mendix](https://www.mendix.com/) - Lowcode application development platform leader in rapidly building, deploying, and operating enterprise-grade applications. +- [Nintex](https://www.nintex.de/) - Enterprise ready, easy-to-use, powerful & complete process platform. +- [Outsystems](https://www.outsystems.com/) - Extraordinarily fast, visual, model-driven development meets AI, cloud, and DevOps. +- [Quickbase](https://www.quickbase.com/) - Lowcode-Plattform for Citizen Development. +- [Service Now](https://www.servicenow.com/) - Build and run applications with advanced features like ai. +- [Thinkwise](https://www.thinkwisesoftware.com/) - Lowcode Platform for core systems. +- [VisionX](https://visionx.sibvisions.com/) - Lowcode Development Platform. + +## Automation and Workflows + +- [Automate.io](https://automate.io/) - Connect your cloud applications and automate marketing, sales and business processes. +- [Camunda](https://camunda.com/) - Workflow and decision automation. +- [Decisions](https://decisions.com/) - Automate Everything. +- [FlowForma](https://www.flowforma.com/) - Empower business people to digitize processes in-house, with a digital process automation tool trusted by IT. +- [IFTTT](https://ifttt.com/) - Connect all your things together. +- [Integromat](https://www.integromat.com/) - Connect apps and automate workflows in a few clicks. +- [Kintone](https://www.kintone.com/) - All-in-one workplace platform to build, share, and automate custom workflows and processes for data-driven results. +- [Microsoft Flow - Power Automate](https://flow.microsoft.com/) - Streamline repetitive tasks and paperless processes. +- [n8n](https://n8n.io/) - Open Source and extendable workflow automation. +- [Node-RED](https://nodered.org/) - Open Source lowcode programming for event-driven applications. +- [Parabola](https://parabola.io/) - Makes it easy to automate your manual, repetitive data tasks. +- [Pipedream](https://pipedream.com/) - Connect APIs, remarkably fast. +- [Pipefy](https://www.pipefy.com/) - Design and automate business workflows in minutes. +- [ProcessMaker](https://www.processmaker.com/) - Lowcode BPM and Digital Process Automation Platform. +- [Process.st](https://www.process.st/) - Simple, free and powerful way to manage your team's recurring checklists and procedures. +- [Tonkean](https://tonkean.com/) - A Enterprise Standard for Process Orchestration. +- [Tray.io](https://tray.io/) - Integrate your entire stack with the leading general automation platform. +- [Workato](https://www.workato.com/) - Workflow automation, AI, Bots and more. +- [Zapier](https://zapier.com/) - Connect your apps and automate tasks. + +## Forms + +- [Google Forms](https://forms.google.com/) - Free. +- [involve.me](https://www.involve.me/) - Create lead generation quizzes, smart cancellation funnels, subscription payments and more. +- [JotForm](https://www.jotform.com/) - A simple online forms tool for any kind of business. +- [Microsoft Forms](https://forms.office.com/) - Easily create surveys, quizzes, and polls. +- [Typeform](https://www.typeform.com/) - Beautiful designed forms. + +## Internal + +- [AWS Honeycode](https://www.honeycode.aws/) - Build apps for managing your team's work. +- [Budibase](https://www.budibase.com/) - Open Source software to build internal tools on your own infrastructure in minutes. +- [JetAdmin](https://www.jetadmin.io/) - Build apps for your teams without engineering effort. +- [Ninox](https://ninox.com/) - Make your business process digital in the cloud. +- [Retool](https://retool.com/) - Build internal tools, remarkably fast. +- [Draxlr](https://draxlr.com/) - Get answers from you data, share with your team and customers. +- [Trevor.io](https://trevor.io/) - Empowering your whole team to get answers from your database data. + +## Apps + +- [Adalo](https://www.adalo.com/) - Building real apps. Fast. +- [Appery.io](https://appery.io/) - Lowcode app platform that makes creating hybrid mobile apps, web apps, and progressive web apps easy. +- [AppGyver](https://www.appgyver.com/) - Free nocode platform building apps for all form factors, including mobile, desktop, browser and TV. +- [Appsheet](https://www.appsheet.com/) - Mobile App builder. +- [Appsmith](https://www.appsmith.com/) - Open source framework to build admin panels, CRUD apps and workflows. +- [Appspotr](https://www.appspotr.com/) - Professional mobile apps, faster and with more control. +- [Appypie AppMakr](https://www.appypie.com/app-builder/appmaker) - App builder to make your app without coding. +- [Betty Blocks](https://www.bettyblocks.com/) - Build Faster and Innovate Smarter with No-Code. +- [Bubble](https://bubble.io/) - Build production-ready web apps. +- [DronaHQ](https://dronahq.com/) - Rapidly build and deploy cloud based apps like data collection apps, online forms, online database app, business process apps, automation apps, internal tools, custom business apps. +- [FileMaker](https://www.claris.com/filemaker/) - An application development platform to build apps like a boss. +- [Fliplet](https://fliplet.com/) - App builder for mobile and web. +- [Glide](https://www.glideapps.com/) - Build an app from a Google Sheet. +- [Microsoft Power Apps](https://powerapps.microsoft.com/) - Lowcode app platform. +- [Odoo](https://www.odoo.com/) - Open Source business management app builder. +- [Oracle APEX](https://apex.oracle.com/) - Build enterprise apps 20x faster with 100x less code. +- [Siberian CMS](https://www.siberiancms.com/) - Open Source CMS for building mobile apps on Andoid and IOS. +- [Skuid](https://www.skuid.com/) - Create Salesforce apps faster and with less custom code. +- [Stacker](https://www.stackerhq.com/) - Turn your spreadsheets into applications. +- [Structr](https://structr.com/) - Open Source lowcode platform for semantic apps based on graph technology. +- [Thunkable](https://thunkable.com/) - Mobile app builder. + +## Landing Pages + +- [Convertkit](https://convertkit.com/) - Landing pages and email marketing automation. +- [GetResponse](https://getresponse.com/) - Landing pages, email marketing, marketing automation and conversion funnels. +- [Instapage](https://instapage.com/) - Landing pages with more conversions, page speed optimization, and experimentation features. +- [Lander](https://landerapp.com/) - Easy to use landing page builder. +- [Landingi](https://landingi.com/) - Design, publish, connect, optimize, convert and sell with landing pages. +- [Launchaco](https://www.launchaco.com/) - Small website builder for startups. +- [Leadpages](https://www.leadpages.com/) - Landing pages and lead generation. +- [Pagewiz](https://www.pagewiz.com/) - Landing pages, integrations, campaign management and A/B testing. +- [Shortstack](https://www.shortstack.com/) - Create unique landing pages, run social contests, send emails and analyze results. +- [Umso](https://www.umso.com/) - The website builder for startups. +- [Unbounce](https://unbounce.com/) - Custom landing pages, high-converting campaigns with conversion intelligence and smart traffic. +- [Unicorn Platform](https://unicornplatform.com/) - Simple landing page builder for startups, mobile apps, and SaaS. +- [Unstack](https://www.unstack.com/) - Merketing websites with the super power of content, analytics, payments and integrations. + +## Websites + +- [8b](https://8b.com/) - Very cheap website builder with code export. +- [Carrd](https://carrd.co/) - For personal one-page websites. +- [Duda](https://www.duda.co/) - Professional website builder for all kinds of business. +- [Hubspot CMS](https://www.hubspot.de/products/cms) - Easy create marketing websites without coding. +- [Jimdo](https://www.jimdo.com/) - Start your business online, fast and easy. +- [Quarkly](https://quarkly.io/) - Design tool for creating websites and web apps. +- [Shopify](https://www.shopify.com/) - E-commerce website builder. +- [Squarespace](https://squarespace.com/) - Professional website builder. +- [Strikingly](https://www.strikingly.com/) - Easy website builder. +- [Tilda](https://tilda.cc/) - Visual publishing made easy. +- [Webflow](https://webflow.com/) - Build professional, custom websites in a completely visual canvas with no code. +- [Weebly](https://www.weebly.com/) - Professional websites and e-commerce. +- [Without Code](https://www.wocode.com/) - Build faster websites, in half the time. +- [Wix](https://wix.com/) - Build a professional website. + +## Portfolios + +- [ALLYOU](https://www.allyou.net/) - Create a simple photo gallery or a professional online portfolio. +- [Carbonmade](https://carbonmade.com/) - The easiest and fastest way to present your work. +- [Dunked](https://dunked.com/) - Portfolio & showcase websites. +- [Exposure](https://www.exposure.co/) - A website builder for your stories. +- [Pixpa](https://www.pixpa.com/) - Portfolio websites for photographers and creators. + +## Membership + +- [Memberspace](https://www.memberspace.com/) - Turn any part of website into members-only with just a few clicks. +- [Memberstack](https://www.memberstack.com/) - Beautiful user logins and payments for any website. + +## Databases + +- [Airtable](https://airtable.com/) - Create applications from a database like a spreadsheet. +- [Baserow](https://baserow.io/) - Open source online database. +- [JotForm Tables](https://www.jotform.com/de/products/tables/) - Dynamic spreadsheet. +- [Rows](https://rows.com/) - The spreadsheet where teams work faster. + +## Chatbots + +- [Botsify](https://botsify.com/) - Fully Managed Chatbot Platform. +- [BotXO](https://www.botxo.ai/) - Powerful AI chatbot builder made easy for businesses. +- [Chatamo](https://chatamo.com/) - Chatbot builder to increase your sales, connect with your customers and better understand customers. +- [Chatfuel](https://chatfuel.com/) - The leading no-code chatbot platform for Facebook, Instagram, and Messenger. +- [Flow.ai](https://flow.ai/) - Intelligent Automation using bots. +- [Flow XO](https://flowxo.com/) - Powerful automation product that allows you to quickly and simply build incredible chatbots that help you to communicate and engage with your customers across a wide range of different sites, applications and social media platforms. +- [Giosg](https://www.giosg.com/) - Capture your most valuable leads and customers. +- [Intercom](https://www.intercom.com/) - Live chat, product tours, apps and more - build relationships with your customers. +- [Landbot](https://landbot.io/) - Intuitive chatbot builder. +- [Opla.ai](https://opla.ai/) - Open Chatbot builder. +- [Smooch](https://smooch.io/) - Lets you unify messages from every channel into a single conversation, and build interactive messaging experiences anywhere. +- [Tars](https://hellotars.com/) - Optimize your conversion funnels, automate customer service interactions, and redefine customer experience. + +## Machine Learning + +- [Accern](https://accern.com/) - Accelerate AI workflows for financial services with a Nocode AI platform. +- [BigML](https://bigml.com/) - ML made beautifully simple for everyone. +- [CreateML](https://developer.apple.com/machine-learning/create-ml/) - Experience an entirely new way of training machine learning models on your Mac. +- [Datarobot](https://www.datarobot.com/) - End-to-End enterprise AI platform for fast and easy deployment of accurate predictive models. Prepare, build, deploy, monitor, and maintain powerful AI applications at enterprise scale. +- [Fritz.ai](https://www.fritz.ai/) - ML platform for iOS, Android, and SnapML in Lens Studio. +- [Google Cloud AutoML](https://cloud.google.com/automl) - Training of high-quality custom machine learning models with minimal effort and machine learning expertise. +- [Google Cloud ML Kit](https://developers.google.com/ml-kit) - Mobile software development kit that brings machine learning expertise to Android and iOS apps. +- [MakeML](https://makeml.app/) - Create Object Detection and Segmentation ML models without Code. +- [Microsoft Azure Automated ML](https://azure.microsoft.com/en-us/services/machine-learning/automatedml/) - Automatically build machine learning models with speed and scale. +- [Obviously AI](https://www.obviously.ai/) - Machine learning tool that makes data science effortless by enabling anyone to instantly run accurate predictions as well as analytics on their data by asking questions in natural language. +- [RunwayML](https://runwayml.com/) - Makes machine learning accessible to creative practitioners from a wide range of disciplines. +- [Superannotate](https://superannotate.com/) - End-to-End platform to annotate, train and automate computer vision pipelines. +- [Teachable Machine](https://teachablemachine.withgoogle.com/) - Web-based tool for training a computer to recognise images, sounds, and poses. + +## Games + +- [Buildbox](https://www.buildbox.com/) - No-Code mobile game development. + +## Scraper + +- [Simplescraper](https://simplescraper.io/) - Extract data from any website in seconds. + +## More (Uncategorized) + +- [Actiondesk](https://www.actiondesk.io/) - Mixes the ease and flexibility of a spreadsheet with the power of a BI tool. +- [Smartsheet](https://www.smartsheet.com/) - Get more work done with workflow, formulars and automations. +- [Voiceflow](https://www.voiceflow.com/) - Voiceflow helps prototype and launch conversational apps. +- [Linkz.ai](https://linkz.ai) - Immersive hyperlink previews to keep visitors on your website. + +# Under Consideration + +A list of **possible** awesome nocode and lowcode ressources which applies to one or more of the following: + +- Not sure, if awesome or not. +- Not fully developed. +- Alpha or beta version. + +## Awesome or not? + +- [Azkaban](https://azkaban.github.io/) - Batch workflow job scheduler created to run Hadoop jobs. +- [Builder.io](https://www.builder.io/) - Drag and drop page building using your code components. +- [CoCreate](https://cocreate.app/) - A low-code Javascript framework for building collaborative no-code platforms, apps and UI. +- [Datasiv](https://www.datasiv.io/) - Quickly build internal tools. +- [Flazio](https://www.flazio.com/) - Website builder. +- [Joget](https://www.joget.org/) - Open Source platform to easily build, run and maintain apps. +- [Kickofflabs](https://kickofflabs.com/) - Landing pages. +- [Launchrock](https://www.launchrock.com/) - Website builder. +- [Pagexl](https://pagexl.com/) - Page Builder for one-page websites. +- [Pory.io](https://pory.io/) - Create websites using Airtable without code. +- [Prefect.io](https://www.prefect.io/) - Dataflow automation to build, run, and monitor millions of data workflows and pipelines. +- [Saltcorn](https://saltcorn.com/) - Free and open source no-code application builder. +- [smapOne](https://www.smapone.com/) - Create business apps in minutes. +- [Tadabase](https://tadabase.io/) - Create custom database web apps in minutes. +- [Tideflow.io](https://www.tideflow.io/) - Building extensible automation. Open Source. +- [Wishpond](https://www.wishpond.com/) - Landing pages. +- [Zyro](https://zyro.com/) - Website builder. + +## In alpha or beta version + +- [Blocks UI](https://blocks-ui.com/) +- [Draftbit](https://draftbit.com/) - Create, customize, and launch mobile apps visually. +- [Tayfa](https://usetayfa.com/) +- [WayScript](https://wayscript.com/) - A rapid scripting platform for developers. Build and run apps in the cloud, automate tasks, create internal tools and seamlessly integrate with your favorite database and APIs using your favorite programming language. +- [yCode](https://www.ycode.com/) - Websites and apps. diff --git a/components/fluent-ext/fluentqa-md/src/test/resources/low-code-5.md b/components/fluent-ext/fluentqa-md/src/test/resources/low-code-5.md new file mode 100644 index 0000000..6da0960 --- /dev/null +++ b/components/fluent-ext/fluentqa-md/src/test/resources/low-code-5.md @@ -0,0 +1,149 @@ +# Awesome low-code! + +[![Awesome](https://cdn.rawgit.com/sindresorhus/awesome/d7305f38d29fed78fa85652e3a63e154dd8e8829/media/badge.svg)](https://github.com/antdimot/awesome-lowcode) + +A collection of Awesome low-code development platform ([LCDP](https://en.wikipedia.org/wiki/Low-code_development_platform)). +Everyone is welcome to submit their new Awesome low-code item. + +# License + +[![CC0](https://licensebuttons.net/p/zero/1.0/88x31.png)](https://creativecommons.org/publicdomain/zero/1.0/) + + +# Table of Contents + +- [Awesome low-code!](#awesome-low-code) +- [License](#license) +- [Table of Contents](#table-of-contents) + - [Automation](#automation) + - [Educational](#educational) + - [Flow-based programming](#flow-based-programming) + - [Machine Learning](#machine-learning) + - [Online database creator apps](#online-database-creator-apps) + - [Visual programming](#visual-programming) + - [Marketing](#marketing) + - [Misc](#misc) + +## Automation + +* [Appian](https://www.appian.com/) - Discover the power of low-code automation. +* [Automate.io](https://automate.io) - Connect your cloud apps. +* [Axiom](https://axiom.ai/) - Browser automation. Quickly, without code. +* [Blink](https://www.blinkops.com) - No-code automation for CloudOps. +* [Camunda](https://camunda.com/) - Automate Any Process, Anywhere. +* [Data Fetcher for Airtable](https://datafetcher.com/) - Connect Airtable to any API using the Data Fetcher app. +* [Make](https://www.make.com) - Make lets you design, build, and automate anything from tasks and workflows to apps and systems. +* [Phantombuster](https://phantombuster.com/) - Code free automations and data extraction. +* [Reflect](https://reflect.run/) - Automated regression tests without a line of code. +* [Stackby](https://stackby.com/) - Automate workflows, build custom tools, collaborate with your team. +* [Uipath](https://www.uipath.com/) - We make robots so people don’t have to be robots. + +## Educational + +* [Doc Willianms](https://www.youtube.com/channel/UCXv_CS0DaUVS25tFGkRALoA) - No Code tutorials. +* [Markerpad](https://www.makerpad.co/) - Join thousands learning to build software. No coding required. + +## Flow-based programming + +* [AppFlow](https://aws.amazon.com/appflow/) - Securely integrate apps and automate data flows at any scale, without code. +* [Bravo Studio](https://www.bravostudio.app/) - Bravo’s powerful no-code approach to mobile app development. +* [Funnel](https://funnel.io/) - All your marketing and advertising data where you want it. +* [Ifttt](https://ifttt.com/) - Helps your apps and devices work together in new ways. +* [Impira](https://www.impira.com/) - Grab data from any document in seconds with Impira’s no-code platform powered by machine learning. +* [joonbot](https://joonbot.com/) - Make a chatbot in minutes with our intuitive no-code chatbot builder. +* [Kissflow](https://kissflow.com) - The full spectrum of work on one platform. +* [n8n.io](https://n8n.io/) - Extendable workflow automation. +* [Node-RED](https://nodered.org/) - A programming tool for wiring together hardware devices, APIs and online services in new and interesting ways. +* [Parabola](https://parabola.io/) - Hand off your routine data tasks by describing them in Parabola. Build once, reuse infinitely. +* [Stately](https://stately.ai/) - The ideal state of visual application logic. +* [Structr](https://structr.com) - The visualization of the data and program structures as a graph accelerates the development and makes the results easily comprehensible for everyone at any time. +* [Wayscript](https://wayscript.com) - A rapid scripting platform for developers. +* [Zapier](https://zapier.com) - Connect your apps and automate workflows. + +## Machine Learning + +* [Accern](https://accern.com) - Accelerate AI Workflows for Financial Services. +* [AI Builder](https://flow.microsoft.com/en-us/ai-builder/) - Bring intelligent automation to your business processes with AI that’s easy to train and configure in Power Automate. +* [Alteryx](https://www.alteryx.com/products/alteryx-platform/machine-learning) - Scale data science across your business with automated machine learning (AutoML). +* [Dataiku](https://www.dataiku.com/product/key-capabilities/machine-learning) - Build advanced machine learning models using the latest techniques. +* [DataRobot](https://www.datarobot.com/platform/visual-ai/) - DataRobot Automated Machine Learning with Visual AI. +* [h2o](https://www.h2o.ai/) - Get free, hands-on experience with the H2O AI Hybrid Cloud. +* [Jasper](https://www.jasper.ai/) - Artificial intelligence makes it fast & easy to create content for your blog, social media, website, and more! +* [Knime](https://www.knime.com/knime-analytics-platform) - Creating Data Science. +* [RapidMiner](https://rapidminer.com/products/studio/) - Comprehensive data science platform with visual workflow design and full automation. +* [Noogata](https://noogata.com/) - AI platform gives companies the impact of data science without the burden of development or the limitations of out-of-the-box solutions. +* [SaegMaker](https://aws.amazon.com/sagemaker/) - Machine learning for every data scientist and developer. +* [Sas](https://www.sas.com/en_si/software/machine-learning-cloud.html) - On-demand programming access to machine learning algorithms in the cloud. + +## Online database creator apps + +* [Airtable](https://airtable.com/) - Part spreadsheet, part database, and entirely flexible, teams use Airtable to organize their work, their way. +* [Amplication](https://amplication.com/) - Build production-ready Node.js applications without wasting time on repetitive coding. +* [Baserow](https://baserow.io/) - Open source no-code database and Airtable alternative. +* [Caspio](https://www.caspio.com/) - Building online database applications without coding. +* [Coda](https://coda.io/) - All-in-one doc. +* [Hasura](https://hasura.io/) - From your databases to a unified GraphQL API in just one minute. +* [NocoDB](https://nocodb.com/) - NocoDB is an open source #NoCode platform that turns any database into a smart spreadsheet. +* [Retool](https://retool.com/) - Retool cuts the time it takes to build internal tools in half so you can focus on your customers. +* [Rows](https://rows.com/) - The spreadsheet with superpowers. +* [Supabase](https://supabase.com/) - The Open SourceFirebase Alternative. + +## Visual programming + +* [Adalo](https://www.adalo.com/) - Turn Your Amazing App Concept Into Reality Without Coding! +* [Appbase.io](https://www.appbase.io) - Elasticsearch supercharged. +* [AppSheet](https://www.appsheet.com/) - The fastest way to build apps and automate work. +* [Appsmith](https://www.appsmith.com/) - A powerful open source framework to build internal tools. +* [Appwrite](https://appwrite.io/) - Secure Open-Source Backend Server for Web, Mobile & Flutter Developers. +* [Bildr](https://www.bildr.com) - Open-ended, extensible, collaboration-focused website and web app builder. +* [Boundlesslabs](https://www.boundlesslabs.com/) - Boundless lets you build the web site of your dreams. No code required. +* [bubble](https://bubble.io/) - A code-free programming language that lets you build and host web applications without engineers. +* [Carrd](https://carrd.co/) - Simple, free, fully responsive one-page sites for pretty much anything. +* [Cloudscape](https://cloudscape.design/) - An open source design system for the cloud. +* [Dronahq](https://www.dronahq.com) - Build business apps without coding. +* [Heyflow](https://heyflow.app/) - Build interactive flows. +* [Glide](https://www.glideapps.com/) - Create an app from a Google Sheet in five minutes, for free. +* [Growform](https://www.growform.co/) - The Multi Step Form Builder that Gets You More Leads. +* [Honeycode](https://www.honeycode.aws/) - Build a better way to work. +* [Insomnia](https://insomnia.rest) - Build APIs that work. +* [Jotform App](https://www.jotform.com/products/apps/) - Create apps for your business. +* [Outsystems](https://www.outsystems.com/) - Build Applications Fast, Right, and for the Future. +* [Plasmic](https://www.plasmic.app/) - The visual builder for your tech stack. +* [Potion](https://www.potion.so/) - Create custom websitesin minutes. All on [Notion](https://www.notion.so/). +* [Power Apps](https://powerapps.microsoft.com) - Create the high productivity apps you need for your business with an advanced set of tools. +* [Quarkly](https://quarkly.io) - Design tool for creating websites and web apps. +* [Quickbase](https://www.quickbase.com) - Application development platform that unites business and IT teams. +* [Sanity](https://www.sanity.io/) - The unified content platform. +* [Softr](https://www.softr.io) - From zero to a website in 5 minutes, using building blocks. +* [Stacker](https://stacker.app) - Turn your spreadsheets into applications. +* [Storybook](https://storybook.js.org) - Build component driven UIs faster. +* [Super](https://super.so) - Build websites with the simplicity of Notion. +* [Typedream](https://typedream.com) - The new way to make a website. +* [Webflow](https://webflow.com) - Build better business websites, faster. Without coding. + +## Marketing + +* [AppSumo](https://appsumo.com/) - Discover, buy, & sell the products you need to grow your business. +* [Bannerbear](https://www.bannerbear.com/) - Auto-generate social media visuals, ecommerce banners, dynamic email images and more with our API and integrations. + +## Misc + +* [Algolia](https://www.algolia.com/) - Flexible Search & Discovery Hosted APIs. +* [Autocode](https://autocode.com) - New user notifications. Purchase alerts. Scheduled jobs. SQL queries. +* [Craftar](https://www.craftar.io) - Build APIs with NoCode at Lightning Speed. +* [Doppler](https://www.doppler.com/) - Sync environment variables at scale. +* [Fibery](https://fibery.io) - Build your own workspace. +* [Getstream](https://getstream.io) - Stream powers Chat Messaging and Activity Feeds for billions of global end-users across thousands of different apps. +* [Makerpad](https://www.makerpad.co/) - Build tools & automate at work without code. +* [NoCodeAPI](https://nocodeapi.com/) - The easiest way to connect with APIs. +* [placeid](https://placid.app/) - Generate your social share images automatically. +* [SaaS Blocks](https://saasblocks.io/) - Ready-to-use building blocks and APIs to take your SaaS application to the next level +* [Screenshot](https://www.screenshotapi.net/) - Programmatic Screenshots of Any Website in Seconds. +* [Shopify](https://shopify.com/) - Build your business. +* [Simplescraper](https://simplescraper.io/) - Extract data from any website in seconds. +* [Stripe](https://stripe.com) - The new standard in online payments. +* [ToolJet](https://github.com/ToolJet/ToolJet) - Low-code framework for building internal tools. +* [Vantiq](https://vantiq.com/) - The Only Low Code Platform for Real Time Systems. +* [Voiceflow](https://www.voiceflow.com/) - Design, prototype and build voice apps. +* [Zendesk](https://www.zendesk.com/) - Build the best customer experiences. + diff --git a/components/fluent-ext/fluentqa-md/src/test/resources/low-code-6.md b/components/fluent-ext/fluentqa-md/src/test/resources/low-code-6.md new file mode 100644 index 0000000..c3dbe73 --- /dev/null +++ b/components/fluent-ext/fluentqa-md/src/test/resources/low-code-6.md @@ -0,0 +1,146 @@ +# Awesome low-code! + +[![Awesome](https://cdn.rawgit.com/sindresorhus/awesome/d7305f38d29fed78fa85652e3a63e154dd8e8829/media/badge.svg)](https://github.com/antdimot/awesome-lowcode) + +A collection of Awesome low-code development platform ([LCDP](https://en.wikipedia.org/wiki/Low-code_development_platform)). +Everyone is welcome to submit their new Awesome low-code item. + +# License + +[![CC0](https://licensebuttons.net/p/zero/1.0/88x31.png)](https://creativecommons.org/publicdomain/zero/1.0/) + + +# Table of Contents + +- [Awesome low-code!](#awesome-low-code) +- [License](#license) +- [Table of Contents](#table-of-contents) + - [Automation](#automation) + - [Educational](#educational) + - [Flow-based programming](#flow-based-programming) + - [Machine Learning](#machine-learning) + - [Online database creator apps](#online-database-creator-apps) + - [Visual programming](#visual-programming) + - [Marketing](#marketing) + - [Misc](#misc) + +## Automation + +* [Appian](https://www.appian.com/) - Discover the power of low-code automation. +* [Automate.io](https://automate.io) - Connect your cloud apps. +* [Axiom](https://axiom.ai/) - Browser automation. Quickly, without code. +* [Blink](https://www.blinkops.com) - No-code automation for CloudOps. +* [Camunda](https://camunda.com/) - Automate Any Process, Anywhere. +* [Data Fetcher for Airtable](https://datafetcher.com/) - Connect Airtable to any API using the Data Fetcher app. +* [Make](https://www.make.com) - Make lets you design, build, and automate anything from tasks and workflows to apps and systems. +* [Phantombuster](https://phantombuster.com/) - Code free automations and data extraction. +* [Reflect](https://reflect.run/) - Automated regression tests without a line of code. +* [Stackby](https://stackby.com/) - Automate workflows, build custom tools, collaborate with your team. +* [Uipath](https://www.uipath.com/) - We make robots so people don’t have to be robots. + +## Educational + +* [Doc Willianms](https://www.youtube.com/channel/UCXv_CS0DaUVS25tFGkRALoA) - No Code tutorials. +* [Markerpad](https://www.makerpad.co/) - Join thousands learning to build software. No coding required. + +## Flow-based programming + +* [AppFlow](https://aws.amazon.com/appflow/) - Securely integrate apps and automate data flows at any scale, without code. +* [Bravo Studio](https://www.bravostudio.app/) - Bravo’s powerful no-code approach to mobile app development. +* [Funnel](https://funnel.io/) - All your marketing and advertising data where you want it. +* [Ifttt](https://ifttt.com/) - Helps your apps and devices work together in new ways. +* [joonbot](https://joonbot.com/) - Make a chatbot in minutes with our intuitive no-code chatbot builder. +* [n8n.io](https://n8n.io/) - Extendable workflow automation. +* [Node-RED](https://nodered.org/) - A programming tool for wiring together hardware devices, APIs and online services in new and interesting ways. +* [Parabola](https://parabola.io/) - Hand off your routine data tasks by describing them in Parabola. Build once, reuse infinitely. +* [Stately](https://stately.ai/) - The ideal state of visual application logic. +* [Structr](https://structr.com) - The visualization of the data and program structures as a graph accelerates the development and makes the results easily comprehensible for everyone at any time. +* [Wayscript](https://wayscript.com) - A rapid scripting platform for developers. +* [Zapier](https://zapier.com) - Connect your apps and automate workflows. + +## Machine Learning + +* [Accern](https://accern.com) - Accelerate AI Workflows for Financial Services. +* [AI Builder](https://flow.microsoft.com/en-us/ai-builder/) - Bring intelligent automation to your business processes with AI that’s easy to train and configure in Power Automate. +* [Alteryx](https://www.alteryx.com/products/alteryx-platform/machine-learning) - Scale data science across your business with automated machine learning (AutoML). +* [Dataiku](https://www.dataiku.com/product/key-capabilities/machine-learning) - Build advanced machine learning models using the latest techniques. +* [DataRobot](https://www.datarobot.com/platform/visual-ai/) - DataRobot Automated Machine Learning with Visual AI. +* [h2o](https://www.h2o.ai/) - Get free, hands-on experience with the H2O AI Hybrid Cloud. +* [Jasper](https://www.jasper.ai/) - Artificial intelligence makes it fast & easy to create content for your blog, social media, website, and more! +* [Knime](https://www.knime.com/knime-analytics-platform) - Creating Data Science. +* [RapidMiner](https://rapidminer.com/products/studio/) - Comprehensive data science platform with visual workflow design and full automation. +* [Noogata](https://noogata.com/) - AI platform gives companies the impact of data science without the burden of development or the limitations of out-of-the-box solutions. +* [SaegMaker](https://aws.amazon.com/sagemaker/) - Machine learning for every data scientist and developer. +* [Sas](https://www.sas.com/en_si/software/machine-learning-cloud.html) - On-demand programming access to machine learning algorithms in the cloud. + +## Online database creator apps + +* [Airtable](https://airtable.com/) - Part spreadsheet, part database, and entirely flexible, teams use Airtable to organize their work, their way. +* [Baserow](https://baserow.io/) - Open source no-code database and Airtable alternative. +* [Caspio](https://www.caspio.com/) - Building online database applications without coding. +* [Coda](https://coda.io/) - All-in-one doc. +* [Hasura](https://hasura.io/) - From your databases to a unified GraphQL API in just one minute. +* [NocoDB](https://nocodb.com/) - NocoDB is an open source #NoCode platform that turns any database into a smart spreadsheet. +* [Retool](https://retool.com/) - Retool cuts the time it takes to build internal tools in half so you can focus on your customers. +* [Rows](https://rows.com/) - The spreadsheet with superpowers. +* [Supabase](https://supabase.com/) - The Open SourceFirebase Alternative. + +## Visual programming + +* [Adalo](https://www.adalo.com/) - Turn Your Amazing App Concept Into Reality Without Coding! +* [Appbase.io](https://www.appbase.io) - Elasticsearch supercharged. +* [AppSheet](https://www.appsheet.com/) - The intelligent no‑code platform. +* [Appsmith](https://www.appsmith.com/) - A powerful open source framework to build internal tools. +* [Appwrite](https://appwrite.io/) - Secure Open-Source Backend Server for Web, Mobile & Flutter Developers. +* [Bildr](https://www.bildr.com) - Open-ended, extensible, collaboration-focused website and web app builder. +* [Boundlesslabs](https://www.boundlesslabs.com/) - Boundless lets you build the web site of your dreams. No code required. +* [bubble](https://bubble.io/) - A code-free programming language that lets you build and host web applications without engineers. +* [Carrd](https://carrd.co/) - Simple, free, fully responsive one-page sites for pretty much anything. +* [Cloudscape](https://cloudscape.design/) - An open source design system for the cloud. +* [Dronahq](https://www.dronahq.com) - Build business apps without coding. +* [Heyflow](https://heyflow.app/) - Build interactive flows. +* [Glide](https://www.glideapps.com/) - Create an app from a Google Sheet in five minutes, for free. +* [Growform](https://www.growform.co/) - The Multi Step Form Builder that Gets You More Leads. +* [Honeycode](https://www.honeycode.aws/) - Build a better way to work. +* [Insomnia](https://insomnia.rest) - Build APIs that work. +* [Jotform App](https://www.jotform.com/products/apps/) - Create apps for your business. +* [Outsystems](https://www.outsystems.com/) - Build Applications Fast, Right, and for the Future. +* [Plasmic](https://www.plasmic.app/) - The visual builder for your tech stack. +* [Potion](https://www.potion.so/) - Create custom websitesin minutes. All on [Notion](https://www.notion.so/). +* [Power Apps](https://powerapps.microsoft.com) - Create the high productivity apps you need for your business with an advanced set of tools. +* [Quarkly](https://quarkly.io) - Design tool for creating websites and web apps. +* [Quickbase](https://www.quickbase.com) - Application development platform that unites business and IT teams. +* [Sanity](https://www.sanity.io/) - The unified content platform. +* [Softr](https://www.softr.io) - From zero to a website in 5 minutes, using building blocks. +* [Stacker](https://stacker.app) - Turn your spreadsheets into applications. +* [Storybook](https://storybook.js.org) - Build component driven UIs faster. +* [Super](https://super.so) - Build websites with the simplicity of Notion. +* [Typedream](https://typedream.com) - The new way to make a website. +* [Webflow](https://webflow.com) - Build better business websites, faster. Without coding. + +## Marketing + +* [AppSumo](https://appsumo.com/) - Discover, buy, & sell the products you need to grow your business. +* [Bannerbear](https://www.bannerbear.com/) - Auto-generate social media visuals, ecommerce banners, dynamic email images and more with our API and integrations. + +## Misc + +* [Algolia](https://www.algolia.com/) - Flexible Search & Discovery Hosted APIs. +* [Autocode](https://autocode.com) - New user notifications. Purchase alerts. Scheduled jobs. SQL queries. +* [Craftar](https://www.craftar.io) - Build APIs with NoCode at Lightning Speed. +* [Doppler](https://www.doppler.com/) - Sync environment variables at scale. +* [Fibery](https://fibery.io) - Build your own workspace. +* [Getstream](https://getstream.io) - Stream powers Chat Messaging and Activity Feeds for billions of global end-users across thousands of different apps. +* [Makerpad](https://www.makerpad.co/) - Build tools & automate at work without code. +* [NoCodeAPI](https://nocodeapi.com/) - The easiest way to connect with APIs. +* [placeid](https://placid.app/) - Generate your social share images automatically. +* [SaaS Blocks](https://saasblocks.io/) - Ready-to-use building blocks and APIs to take your SaaS application to the next level +* [Screenshot](https://www.screenshotapi.net/) - Programmatic Screenshots of Any Website in Seconds. +* [Shopify](https://shopify.com/) - Build your business. +* [Simplescraper](https://simplescraper.io/) - Extract data from any website in seconds. +* [Stripe](https://stripe.com) - The new standard in online payments. +* [ToolJet](https://github.com/ToolJet/ToolJet) - Low-code framework for building internal tools. +* [Vantiq](https://vantiq.com/) - The Only Low Code Platform for Real Time Systems. +* [Voiceflow](https://www.voiceflow.com/) - Design, prototype and build voice apps. +* [Zendesk](https://www.zendesk.com/) - Build the best customer experiences. + diff --git a/components/fluent-ext/fluentqa-md/src/test/resources/test-resources.md b/components/fluent-ext/fluentqa-md/src/test/resources/test-resources.md new file mode 100644 index 0000000..f9ad520 --- /dev/null +++ b/components/fluent-ext/fluentqa-md/src/test/resources/test-resources.md @@ -0,0 +1,97 @@ +# QA-RESOURCES + +Here I'll enlist the books, tutorials, articles or courses I've followed or following or will follow to master over the projects in my job. You can follow these to build a solid ground.In my opinion these are the detailed, free knowledge resources to learn. + +## Topics: +* [Books](#books) +* [Courses](#courses) +* [Blogs](#blogs) +* [Testing Tutorials](#testing-tutorials) +* [Tools](#tools) +* [Tech topics](#tech-topics) + +## Books: + +1. [Lessons Learned in Software Testing](https://www.pdfdrive.com/lessons-learned-in-software-testing-a-context-driven-approach-e187000108.html) +2. [Bug Advocacy](https://www.pdfdrive.com/bug-advocacy-e100692712.html) + + +## Courses: +1. [[Coursera - Specialization] Software Development Lifecycle - University of Minnesota](https://www.coursera.org/specializations/software-development-lifecycle) +2. [[Coursera - Specialization] Software Testing and Automation Specialization - University of Minnesota](https://www.coursera.org/specializations/software-testing-automation) +3. [[Coursera - Course] Continuous Delivery & DevOps - University of Virginia](https://www.coursera.org/specializations/software-testing-automation) + + +## Testing Tutorials + +1. Exploratory Testing + - [A Tutorial in Exploratory Testing - By Cam Kaner](https://www.kaner.com/pdfs/QAIExploring.pdf) + - [Exploratory Testing - James Bach](https://www.satisfice.com/exploratory-testing) + - [Effective Exploratory Testing (Part 1): Some good practices](https://meu-solutions.com/effective-exploratory-testing-part-1-2/) + - [Introducing Exploratory Testing](https://www.qualitestgroup.com/white-papers/introducing-exploratory-testing/) + - [Why I'm talking to developers about Exploratory Testing](https://blog.scottlogic.com/2019/11/18/talking-to-devs-about-testing.html) + - [What is Exploratory testing in software testing? Examples, When/How to do, Agile](http://tryqa.com/what-is-exploratory-testing-in-software-testing/) + - [Exploratory testing techniques: Finding software defects using creativity and diligence](https://techbeacon.com/app-dev-testing/exploratory-testing-techniques-finding-software-defects-using-creativity-diligence) + - [Three Digestible Diagrams to Describe Exploratory Testing](https://www.ministryoftesting.com/dojo/lessons/three-digestible-diagrams-to-describe-exploratory-testing) + +## Tools: + +1. Postman + - [TUTORIALS] [Easy Postman Tutorial for Beginners - By toolsqa](https://www.toolsqa.com/postman-tutorial/) + - [ARTICLES] [Postman Tutorial for Automation : All you need to know](https://www.cuelogic.com/blog/postman-tutorial-for-automation) +2. Jmeter + - [TUTORIALS] [Jmeter Tutorial](http://www.software-testing-tutorials-automation.com/p/apache-jmeter-tutorial-for-performance.html) + - [COURSE] [Master JMeter from Basics (Performance + Load + API Testing)](https://www.udemy.com/course/master-jmeter-from-basics-performance-load-api-testing/) + - [COURSE] [JMeter™ Intro, JMeter™ Pro](https://www.blazemeter.com/university/) + +3. Selenium + - [TUTORIALS] https://www.guru99.com/selenium-tutorial.html + - https://javabeginnerstutorial.com/selenium/selenium-tutorial/ + - https://artoftesting.com/selenium-tutorial + - https://www.youtube.com/watch?v=Jdkrj2lDAEY + - [Selenium Tutorial - by toolsqa](https://www.toolsqa.com/selenium-tutorial/) + - [Selenium Tutorial – Learn Selenium from Experts](https://intellipaat.com/blog/tutorial/selenium-tutorial/) + +4. Kafka + - [TUTORIALS] https://www.youtube.com/watch?v=gg-VwXSRnmg&list=PLkz1SCf5iB4enAR00Z46JwY9GGkaS2NON + - [TUTORIALS] https://data-flair.training/blogs/apache-kafka-tutorial/ + - [ARTICLES] https://hackernoon.com/thorough-introduction-to-apache-kafka-6fbf2989bbc1 + - [ARTICLES] https://hackernoon.com/apache-kafkas-distributed-system-firefighter-the-controller-broker-1afca1eae302 + - [ARTICLES] https://dzone.com/articles/a-quick-and-practical-example-of-kafka-testing + - [ARTICLES] https://www.jeevora.com/2019/11/18/publish-subscribe-messaging-systems/ + - [BOOK] https://book.huihoo.com/pdf/confluent-kafka-definitive-guide-complete.pdf + - [BOOK] https://www.pdfdrive.com/learning-apache-kafka-2nd-edition-start-from-scratch-and-learn-how-to-administer-apache-kafka-effectively-for-messaging-e167800256.html +5. Zookeeper + - [TUTORIALS] https://data-flair.training/blogs/zookeeper-tutorial/ +6. Hubtel USSD Mocker + - https://github.com/hubtel/ussd-mocker + +7. Rundeck + - [DOCUMENTATION] https://docs.rundeck.com/docs/tutorials/ + +8. Jira + - [COURSE] https://www.udemy.com/course/learn-jira-complete-from-scratch-to-expert/ + + +## Blogs: +01. [Automation] https://automationstepbystep.com/ +02. [QA THOUGHTS] http://testerstories.com/ +03. [TESTING] https://www.eviltester.com/ +04. [AUTOMATION] https://testguild.com/ +05. [TESTING] https://www.satisfice.com/ +06. [QA METHODOLOGY] https://searchsoftwarequality.techtarget.com/ +07. [QA] https://medium.com/tech-tajawal/tagged/qa +08. [TESTING] https://testfort.com/ +09. [QA]http://kaner.com/ +10. [TESTING] https://www.developsense.com/index.html +11. [TESTING] http://www.testingeducation.org/BBST/ +12. [ASSOCIATION] https://www.associationforsoftwaretesting.org/ +13. [BLOG] https://blog.scottlogic.com/category/test.html + + +## Tech topics +01. ISO 8583 + - [ARTICLE] https://www.codeproject.com/Articles/100084/Introduction-to-ISO + - [ARTICLE] https://medium.com/plain-and-simple-series/all-things-tech-beautiful-iso-8583-an-introduction-plain-and-simple-21eb62455b28 + + diff --git a/components/fluent-ext/fluentqa-md/test-resources.html b/components/fluent-ext/fluentqa-md/test-resources.html new file mode 100644 index 0000000..a1ca621 --- /dev/null +++ b/components/fluent-ext/fluentqa-md/test-resources.html @@ -0,0 +1,1374 @@ +

QA-RESOURCES

+

Here I'll enlist the books, tutorials, articles or courses I've followed or following or will follow to master over the projects in my job. You can follow these to build a solid ground.In my opinion these are the detailed, free knowledge resources to learn.

+

Topics:

+ +

Books:

+
    +
  1. Lessons Learned in Software Testing
  2. +
  3. Bug Advocacy
  4. +
+

Courses:

+
    +
  1. [Coursera - Specialization] Software Development Lifecycle - University of Minnesota
  2. +
  3. [Coursera - Specialization] Software Testing and Automation Specialization - University of Minnesota
  4. +
  5. [Coursera - Course] Continuous Delivery & DevOps - University of Virginia
  6. +
+

Testing Tutorials

+
    +
  1. Exploratory Testing
  2. +
+ +

Tools:

+
    +
  1. Postman
  2. +
+ +
    +
  1. Jmeter
  2. +
+ +
    +
  1. Selenium
  2. +
+ +
    +
  1. Kafka
  2. +
+
    +
  • [TUTORIALS] https://www.youtube.com/watch?v=gg-VwXSRnmg&list=PLkz1SCf5iB4enAR00Z46JwY9GGkaS2NON
  • +
  • [TUTORIALS] https://data-flair.training/blogs/apache-kafka-tutorial/
  • +
  • [ARTICLES] https://hackernoon.com/thorough-introduction-to-apache-kafka-6fbf2989bbc1
  • +
  • [ARTICLES] https://hackernoon.com/apache-kafkas-distributed-system-firefighter-the-controller-broker-1afca1eae302
  • +
  • [ARTICLES] https://dzone.com/articles/a-quick-and-practical-example-of-kafka-testing
  • +
  • [ARTICLES] https://www.jeevora.com/2019/11/18/publish-subscribe-messaging-systems/
  • +
  • [BOOK] https://book.huihoo.com/pdf/confluent-kafka-definitive-guide-complete.pdf
  • +
  • [BOOK] https://www.pdfdrive.com/learning-apache-kafka-2nd-edition-start-from-scratch-and-learn-how-to-administer-apache-kafka-effectively-for-messaging-e167800256.html
  • +
+
    +
  1. Zookeeper
  2. +
+
    +
  • [TUTORIALS] https://data-flair.training/blogs/zookeeper-tutorial/
  • +
+
    +
  1. Hubtel USSD Mocker
  2. +
+
    +
  • https://github.com/hubtel/ussd-mocker
  • +
+
    +
  1. Rundeck
  2. +
+
    +
  • [DOCUMENTATION] https://docs.rundeck.com/docs/tutorials/
  • +
+
    +
  1. Jira
  2. +
+
    +
  • [COURSE] https://www.udemy.com/course/learn-jira-complete-from-scratch-to-expert/
  • +
+

Blogs:

+
    +
  1. [Automation] https://automationstepbystep.com/
  2. +
  3. [QA THOUGHTS] http://testerstories.com/
  4. +
  5. [TESTING] https://www.eviltester.com/
  6. +
  7. [AUTOMATION] https://testguild.com/
  8. +
  9. [TESTING] https://www.satisfice.com/
  10. +
  11. [QA METHODOLOGY] https://searchsoftwarequality.techtarget.com/
  12. +
  13. [QA] https://medium.com/tech-tajawal/tagged/qa
  14. +
  15. [TESTING] https://testfort.com/
  16. +
  17. [QA]http://kaner.com/
  18. +
  19. [TESTING] https://www.developsense.com/index.html
  20. +
  21. [TESTING] http://www.testingeducation.org/BBST/
  22. +
  23. [ASSOCIATION] https://www.associationforsoftwaretesting.org/
  24. +
  25. [BLOG] https://blog.scottlogic.com/category/test.html
  26. +
+

Tech topics

+
    +
  1. ISO 8583
  2. +
+
    +
  • [ARTICLE] https://www.codeproject.com/Articles/100084/Introduction-to-ISO
  • +
  • [ARTICLE] https://medium.com/plain-and-simple-series/all-things-tech-beautiful-iso-8583-an-introduction-plain-and-simple-21eb62455b28
  • +
+ +

QA-RESOURCES

+

Here I'll enlist the books, tutorials, articles or courses I've followed or following or will follow to master over the projects in my job. You can follow these to build a solid ground.In my opinion these are the detailed, free knowledge resources to learn.

+

Topics:

+ +

Books:

+
    +
  1. Lessons Learned in Software Testing
  2. +
  3. Bug Advocacy
  4. +
+

Courses:

+
    +
  1. [Coursera - Specialization] Software Development Lifecycle - University of Minnesota
  2. +
  3. [Coursera - Specialization] Software Testing and Automation Specialization - University of Minnesota
  4. +
  5. [Coursera - Course] Continuous Delivery & DevOps - University of Virginia
  6. +
+

Testing Tutorials

+
    +
  1. Exploratory Testing
  2. +
+ +

Tools:

+
    +
  1. Postman
  2. +
+ +
    +
  1. Jmeter
  2. +
+ +
    +
  1. Selenium
  2. +
+ +
    +
  1. Kafka
  2. +
+
    +
  • [TUTORIALS] https://www.youtube.com/watch?v=gg-VwXSRnmg&list=PLkz1SCf5iB4enAR00Z46JwY9GGkaS2NON
  • +
  • [TUTORIALS] https://data-flair.training/blogs/apache-kafka-tutorial/
  • +
  • [ARTICLES] https://hackernoon.com/thorough-introduction-to-apache-kafka-6fbf2989bbc1
  • +
  • [ARTICLES] https://hackernoon.com/apache-kafkas-distributed-system-firefighter-the-controller-broker-1afca1eae302
  • +
  • [ARTICLES] https://dzone.com/articles/a-quick-and-practical-example-of-kafka-testing
  • +
  • [ARTICLES] https://www.jeevora.com/2019/11/18/publish-subscribe-messaging-systems/
  • +
  • [BOOK] https://book.huihoo.com/pdf/confluent-kafka-definitive-guide-complete.pdf
  • +
  • [BOOK] https://www.pdfdrive.com/learning-apache-kafka-2nd-edition-start-from-scratch-and-learn-how-to-administer-apache-kafka-effectively-for-messaging-e167800256.html
  • +
+
    +
  1. Zookeeper
  2. +
+
    +
  • [TUTORIALS] https://data-flair.training/blogs/zookeeper-tutorial/
  • +
+
    +
  1. Hubtel USSD Mocker
  2. +
+
    +
  • https://github.com/hubtel/ussd-mocker
  • +
+
    +
  1. Rundeck
  2. +
+
    +
  • [DOCUMENTATION] https://docs.rundeck.com/docs/tutorials/
  • +
+
    +
  1. Jira
  2. +
+
    +
  • [COURSE] https://www.udemy.com/course/learn-jira-complete-from-scratch-to-expert/
  • +
+

Blogs:

+
    +
  1. [Automation] https://automationstepbystep.com/
  2. +
  3. [QA THOUGHTS] http://testerstories.com/
  4. +
  5. [TESTING] https://www.eviltester.com/
  6. +
  7. [AUTOMATION] https://testguild.com/
  8. +
  9. [TESTING] https://www.satisfice.com/
  10. +
  11. [QA METHODOLOGY] https://searchsoftwarequality.techtarget.com/
  12. +
  13. [QA] https://medium.com/tech-tajawal/tagged/qa
  14. +
  15. [TESTING] https://testfort.com/
  16. +
  17. [QA]http://kaner.com/
  18. +
  19. [TESTING] https://www.developsense.com/index.html
  20. +
  21. [TESTING] http://www.testingeducation.org/BBST/
  22. +
  23. [ASSOCIATION] https://www.associationforsoftwaretesting.org/
  24. +
  25. [BLOG] https://blog.scottlogic.com/category/test.html
  26. +
+

Tech topics

+
    +
  1. ISO 8583
  2. +
+
    +
  • [ARTICLE] https://www.codeproject.com/Articles/100084/Introduction-to-ISO
  • +
  • [ARTICLE] https://medium.com/plain-and-simple-series/all-things-tech-beautiful-iso-8583-an-introduction-plain-and-simple-21eb62455b28
  • +
+ +

QA-RESOURCES

+

Here I'll enlist the books, tutorials, articles or courses I've followed or following or will follow to master over the projects in my job. You can follow these to build a solid ground.In my opinion these are the detailed, free knowledge resources to learn.

+

Topics:

+ +

Books:

+
    +
  1. Lessons Learned in Software Testing
  2. +
  3. Bug Advocacy
  4. +
+

Courses:

+
    +
  1. [Coursera - Specialization] Software Development Lifecycle - University of Minnesota
  2. +
  3. [Coursera - Specialization] Software Testing and Automation Specialization - University of Minnesota
  4. +
  5. [Coursera - Course] Continuous Delivery & DevOps - University of Virginia
  6. +
+

Testing Tutorials

+
    +
  1. Exploratory Testing
  2. +
+ +

Tools:

+
    +
  1. Postman
  2. +
+ +
    +
  1. Jmeter
  2. +
+ +
    +
  1. Selenium
  2. +
+ +
    +
  1. Kafka
  2. +
+
    +
  • [TUTORIALS] https://www.youtube.com/watch?v=gg-VwXSRnmg&list=PLkz1SCf5iB4enAR00Z46JwY9GGkaS2NON
  • +
  • [TUTORIALS] https://data-flair.training/blogs/apache-kafka-tutorial/
  • +
  • [ARTICLES] https://hackernoon.com/thorough-introduction-to-apache-kafka-6fbf2989bbc1
  • +
  • [ARTICLES] https://hackernoon.com/apache-kafkas-distributed-system-firefighter-the-controller-broker-1afca1eae302
  • +
  • [ARTICLES] https://dzone.com/articles/a-quick-and-practical-example-of-kafka-testing
  • +
  • [ARTICLES] https://www.jeevora.com/2019/11/18/publish-subscribe-messaging-systems/
  • +
  • [BOOK] https://book.huihoo.com/pdf/confluent-kafka-definitive-guide-complete.pdf
  • +
  • [BOOK] https://www.pdfdrive.com/learning-apache-kafka-2nd-edition-start-from-scratch-and-learn-how-to-administer-apache-kafka-effectively-for-messaging-e167800256.html
  • +
+
    +
  1. Zookeeper
  2. +
+
    +
  • [TUTORIALS] https://data-flair.training/blogs/zookeeper-tutorial/
  • +
+
    +
  1. Hubtel USSD Mocker
  2. +
+
    +
  • https://github.com/hubtel/ussd-mocker
  • +
+
    +
  1. Rundeck
  2. +
+
    +
  • [DOCUMENTATION] https://docs.rundeck.com/docs/tutorials/
  • +
+
    +
  1. Jira
  2. +
+
    +
  • [COURSE] https://www.udemy.com/course/learn-jira-complete-from-scratch-to-expert/
  • +
+

Blogs:

+
    +
  1. [Automation] https://automationstepbystep.com/
  2. +
  3. [QA THOUGHTS] http://testerstories.com/
  4. +
  5. [TESTING] https://www.eviltester.com/
  6. +
  7. [AUTOMATION] https://testguild.com/
  8. +
  9. [TESTING] https://www.satisfice.com/
  10. +
  11. [QA METHODOLOGY] https://searchsoftwarequality.techtarget.com/
  12. +
  13. [QA] https://medium.com/tech-tajawal/tagged/qa
  14. +
  15. [TESTING] https://testfort.com/
  16. +
  17. [QA]http://kaner.com/
  18. +
  19. [TESTING] https://www.developsense.com/index.html
  20. +
  21. [TESTING] http://www.testingeducation.org/BBST/
  22. +
  23. [ASSOCIATION] https://www.associationforsoftwaretesting.org/
  24. +
  25. [BLOG] https://blog.scottlogic.com/category/test.html
  26. +
+

Tech topics

+
    +
  1. ISO 8583
  2. +
+
    +
  • [ARTICLE] https://www.codeproject.com/Articles/100084/Introduction-to-ISO
  • +
  • [ARTICLE] https://medium.com/plain-and-simple-series/all-things-tech-beautiful-iso-8583-an-introduction-plain-and-simple-21eb62455b28
  • +
+ +

QA-RESOURCES

+

Here I'll enlist the books, tutorials, articles or courses I've followed or following or will follow to master over the projects in my job. You can follow these to build a solid ground.In my opinion these are the detailed, free knowledge resources to learn.

+

Topics:

+ +

Books:

+
    +
  1. Lessons Learned in Software Testing
  2. +
  3. Bug Advocacy
  4. +
+

Courses:

+
    +
  1. [Coursera - Specialization] Software Development Lifecycle - University of Minnesota
  2. +
  3. [Coursera - Specialization] Software Testing and Automation Specialization - University of Minnesota
  4. +
  5. [Coursera - Course] Continuous Delivery & DevOps - University of Virginia
  6. +
+

Testing Tutorials

+
    +
  1. Exploratory Testing
  2. +
+ +

Tools:

+
    +
  1. Postman
  2. +
+ +
    +
  1. Jmeter
  2. +
+ +
    +
  1. Selenium
  2. +
+ +
    +
  1. Kafka
  2. +
+
    +
  • [TUTORIALS] https://www.youtube.com/watch?v=gg-VwXSRnmg&list=PLkz1SCf5iB4enAR00Z46JwY9GGkaS2NON
  • +
  • [TUTORIALS] https://data-flair.training/blogs/apache-kafka-tutorial/
  • +
  • [ARTICLES] https://hackernoon.com/thorough-introduction-to-apache-kafka-6fbf2989bbc1
  • +
  • [ARTICLES] https://hackernoon.com/apache-kafkas-distributed-system-firefighter-the-controller-broker-1afca1eae302
  • +
  • [ARTICLES] https://dzone.com/articles/a-quick-and-practical-example-of-kafka-testing
  • +
  • [ARTICLES] https://www.jeevora.com/2019/11/18/publish-subscribe-messaging-systems/
  • +
  • [BOOK] https://book.huihoo.com/pdf/confluent-kafka-definitive-guide-complete.pdf
  • +
  • [BOOK] https://www.pdfdrive.com/learning-apache-kafka-2nd-edition-start-from-scratch-and-learn-how-to-administer-apache-kafka-effectively-for-messaging-e167800256.html
  • +
+
    +
  1. Zookeeper
  2. +
+
    +
  • [TUTORIALS] https://data-flair.training/blogs/zookeeper-tutorial/
  • +
+
    +
  1. Hubtel USSD Mocker
  2. +
+
    +
  • https://github.com/hubtel/ussd-mocker
  • +
+
    +
  1. Rundeck
  2. +
+
    +
  • [DOCUMENTATION] https://docs.rundeck.com/docs/tutorials/
  • +
+
    +
  1. Jira
  2. +
+
    +
  • [COURSE] https://www.udemy.com/course/learn-jira-complete-from-scratch-to-expert/
  • +
+

Blogs:

+
    +
  1. [Automation] https://automationstepbystep.com/
  2. +
  3. [QA THOUGHTS] http://testerstories.com/
  4. +
  5. [TESTING] https://www.eviltester.com/
  6. +
  7. [AUTOMATION] https://testguild.com/
  8. +
  9. [TESTING] https://www.satisfice.com/
  10. +
  11. [QA METHODOLOGY] https://searchsoftwarequality.techtarget.com/
  12. +
  13. [QA] https://medium.com/tech-tajawal/tagged/qa
  14. +
  15. [TESTING] https://testfort.com/
  16. +
  17. [QA]http://kaner.com/
  18. +
  19. [TESTING] https://www.developsense.com/index.html
  20. +
  21. [TESTING] http://www.testingeducation.org/BBST/
  22. +
  23. [ASSOCIATION] https://www.associationforsoftwaretesting.org/
  24. +
  25. [BLOG] https://blog.scottlogic.com/category/test.html
  26. +
+

Tech topics

+
    +
  1. ISO 8583
  2. +
+
    +
  • [ARTICLE] https://www.codeproject.com/Articles/100084/Introduction-to-ISO
  • +
  • [ARTICLE] https://medium.com/plain-and-simple-series/all-things-tech-beautiful-iso-8583-an-introduction-plain-and-simple-21eb62455b28
  • +
+ +

QA-RESOURCES

+

Here I'll enlist the books, tutorials, articles or courses I've followed or following or will follow to master over the projects in my job. You can follow these to build a solid ground.In my opinion these are the detailed, free knowledge resources to learn.

+

Topics:

+ +

Books:

+
    +
  1. Lessons Learned in Software Testing
  2. +
  3. Bug Advocacy
  4. +
+

Courses:

+
    +
  1. [Coursera - Specialization] Software Development Lifecycle - University of Minnesota
  2. +
  3. [Coursera - Specialization] Software Testing and Automation Specialization - University of Minnesota
  4. +
  5. [Coursera - Course] Continuous Delivery & DevOps - University of Virginia
  6. +
+

Testing Tutorials

+
    +
  1. Exploratory Testing
  2. +
+ +

Tools:

+
    +
  1. Postman
  2. +
+ +
    +
  1. Jmeter
  2. +
+ +
    +
  1. Selenium
  2. +
+ +
    +
  1. Kafka
  2. +
+
    +
  • [TUTORIALS] https://www.youtube.com/watch?v=gg-VwXSRnmg&list=PLkz1SCf5iB4enAR00Z46JwY9GGkaS2NON
  • +
  • [TUTORIALS] https://data-flair.training/blogs/apache-kafka-tutorial/
  • +
  • [ARTICLES] https://hackernoon.com/thorough-introduction-to-apache-kafka-6fbf2989bbc1
  • +
  • [ARTICLES] https://hackernoon.com/apache-kafkas-distributed-system-firefighter-the-controller-broker-1afca1eae302
  • +
  • [ARTICLES] https://dzone.com/articles/a-quick-and-practical-example-of-kafka-testing
  • +
  • [ARTICLES] https://www.jeevora.com/2019/11/18/publish-subscribe-messaging-systems/
  • +
  • [BOOK] https://book.huihoo.com/pdf/confluent-kafka-definitive-guide-complete.pdf
  • +
  • [BOOK] https://www.pdfdrive.com/learning-apache-kafka-2nd-edition-start-from-scratch-and-learn-how-to-administer-apache-kafka-effectively-for-messaging-e167800256.html
  • +
+
    +
  1. Zookeeper
  2. +
+
    +
  • [TUTORIALS] https://data-flair.training/blogs/zookeeper-tutorial/
  • +
+
    +
  1. Hubtel USSD Mocker
  2. +
+
    +
  • https://github.com/hubtel/ussd-mocker
  • +
+
    +
  1. Rundeck
  2. +
+
    +
  • [DOCUMENTATION] https://docs.rundeck.com/docs/tutorials/
  • +
+
    +
  1. Jira
  2. +
+
    +
  • [COURSE] https://www.udemy.com/course/learn-jira-complete-from-scratch-to-expert/
  • +
+

Blogs:

+
    +
  1. [Automation] https://automationstepbystep.com/
  2. +
  3. [QA THOUGHTS] http://testerstories.com/
  4. +
  5. [TESTING] https://www.eviltester.com/
  6. +
  7. [AUTOMATION] https://testguild.com/
  8. +
  9. [TESTING] https://www.satisfice.com/
  10. +
  11. [QA METHODOLOGY] https://searchsoftwarequality.techtarget.com/
  12. +
  13. [QA] https://medium.com/tech-tajawal/tagged/qa
  14. +
  15. [TESTING] https://testfort.com/
  16. +
  17. [QA]http://kaner.com/
  18. +
  19. [TESTING] https://www.developsense.com/index.html
  20. +
  21. [TESTING] http://www.testingeducation.org/BBST/
  22. +
  23. [ASSOCIATION] https://www.associationforsoftwaretesting.org/
  24. +
  25. [BLOG] https://blog.scottlogic.com/category/test.html
  26. +
+

Tech topics

+
    +
  1. ISO 8583
  2. +
+
    +
  • [ARTICLE] https://www.codeproject.com/Articles/100084/Introduction-to-ISO
  • +
  • [ARTICLE] https://medium.com/plain-and-simple-series/all-things-tech-beautiful-iso-8583-an-introduction-plain-and-simple-21eb62455b28
  • +
+ +

QA-RESOURCES

+

Here I'll enlist the books, tutorials, articles or courses I've followed or following or will follow to master over the projects in my job. You can follow these to build a solid ground.In my opinion these are the detailed, free knowledge resources to learn.

+

Topics:

+ +

Books:

+
    +
  1. Lessons Learned in Software Testing
  2. +
  3. Bug Advocacy
  4. +
+

Courses:

+
    +
  1. [Coursera - Specialization] Software Development Lifecycle - University of Minnesota
  2. +
  3. [Coursera - Specialization] Software Testing and Automation Specialization - University of Minnesota
  4. +
  5. [Coursera - Course] Continuous Delivery & DevOps - University of Virginia
  6. +
+

Testing Tutorials

+
    +
  1. Exploratory Testing
  2. +
+ +

Tools:

+
    +
  1. Postman
  2. +
+ +
    +
  1. Jmeter
  2. +
+ +
    +
  1. Selenium
  2. +
+ +
    +
  1. Kafka
  2. +
+
    +
  • [TUTORIALS] https://www.youtube.com/watch?v=gg-VwXSRnmg&list=PLkz1SCf5iB4enAR00Z46JwY9GGkaS2NON
  • +
  • [TUTORIALS] https://data-flair.training/blogs/apache-kafka-tutorial/
  • +
  • [ARTICLES] https://hackernoon.com/thorough-introduction-to-apache-kafka-6fbf2989bbc1
  • +
  • [ARTICLES] https://hackernoon.com/apache-kafkas-distributed-system-firefighter-the-controller-broker-1afca1eae302
  • +
  • [ARTICLES] https://dzone.com/articles/a-quick-and-practical-example-of-kafka-testing
  • +
  • [ARTICLES] https://www.jeevora.com/2019/11/18/publish-subscribe-messaging-systems/
  • +
  • [BOOK] https://book.huihoo.com/pdf/confluent-kafka-definitive-guide-complete.pdf
  • +
  • [BOOK] https://www.pdfdrive.com/learning-apache-kafka-2nd-edition-start-from-scratch-and-learn-how-to-administer-apache-kafka-effectively-for-messaging-e167800256.html
  • +
+
    +
  1. Zookeeper
  2. +
+
    +
  • [TUTORIALS] https://data-flair.training/blogs/zookeeper-tutorial/
  • +
+
    +
  1. Hubtel USSD Mocker
  2. +
+
    +
  • https://github.com/hubtel/ussd-mocker
  • +
+
    +
  1. Rundeck
  2. +
+
    +
  • [DOCUMENTATION] https://docs.rundeck.com/docs/tutorials/
  • +
+
    +
  1. Jira
  2. +
+
    +
  • [COURSE] https://www.udemy.com/course/learn-jira-complete-from-scratch-to-expert/
  • +
+

Blogs:

+
    +
  1. [Automation] https://automationstepbystep.com/
  2. +
  3. [QA THOUGHTS] http://testerstories.com/
  4. +
  5. [TESTING] https://www.eviltester.com/
  6. +
  7. [AUTOMATION] https://testguild.com/
  8. +
  9. [TESTING] https://www.satisfice.com/
  10. +
  11. [QA METHODOLOGY] https://searchsoftwarequality.techtarget.com/
  12. +
  13. [QA] https://medium.com/tech-tajawal/tagged/qa
  14. +
  15. [TESTING] https://testfort.com/
  16. +
  17. [QA]http://kaner.com/
  18. +
  19. [TESTING] https://www.developsense.com/index.html
  20. +
  21. [TESTING] http://www.testingeducation.org/BBST/
  22. +
  23. [ASSOCIATION] https://www.associationforsoftwaretesting.org/
  24. +
  25. [BLOG] https://blog.scottlogic.com/category/test.html
  26. +
+

Tech topics

+
    +
  1. ISO 8583
  2. +
+
    +
  • [ARTICLE] https://www.codeproject.com/Articles/100084/Introduction-to-ISO
  • +
  • [ARTICLE] https://medium.com/plain-and-simple-series/all-things-tech-beautiful-iso-8583-an-introduction-plain-and-simple-21eb62455b28
  • +
+ +

QA-RESOURCES

+

Here I'll enlist the books, tutorials, articles or courses I've followed or following or will follow to master over the projects in my job. You can follow these to build a solid ground.In my opinion these are the detailed, free knowledge resources to learn.

+

Topics:

+ +

Books:

+
    +
  1. Lessons Learned in Software Testing
  2. +
  3. Bug Advocacy
  4. +
+

Courses:

+
    +
  1. [Coursera - Specialization] Software Development Lifecycle - University of Minnesota
  2. +
  3. [Coursera - Specialization] Software Testing and Automation Specialization - University of Minnesota
  4. +
  5. [Coursera - Course] Continuous Delivery & DevOps - University of Virginia
  6. +
+

Testing Tutorials

+
    +
  1. Exploratory Testing
  2. +
+ +

Tools:

+
    +
  1. Postman
  2. +
+ +
    +
  1. Jmeter
  2. +
+ +
    +
  1. Selenium
  2. +
+ +
    +
  1. Kafka
  2. +
+
    +
  • [TUTORIALS] https://www.youtube.com/watch?v=gg-VwXSRnmg&list=PLkz1SCf5iB4enAR00Z46JwY9GGkaS2NON
  • +
  • [TUTORIALS] https://data-flair.training/blogs/apache-kafka-tutorial/
  • +
  • [ARTICLES] https://hackernoon.com/thorough-introduction-to-apache-kafka-6fbf2989bbc1
  • +
  • [ARTICLES] https://hackernoon.com/apache-kafkas-distributed-system-firefighter-the-controller-broker-1afca1eae302
  • +
  • [ARTICLES] https://dzone.com/articles/a-quick-and-practical-example-of-kafka-testing
  • +
  • [ARTICLES] https://www.jeevora.com/2019/11/18/publish-subscribe-messaging-systems/
  • +
  • [BOOK] https://book.huihoo.com/pdf/confluent-kafka-definitive-guide-complete.pdf
  • +
  • [BOOK] https://www.pdfdrive.com/learning-apache-kafka-2nd-edition-start-from-scratch-and-learn-how-to-administer-apache-kafka-effectively-for-messaging-e167800256.html
  • +
+
    +
  1. Zookeeper
  2. +
+
    +
  • [TUTORIALS] https://data-flair.training/blogs/zookeeper-tutorial/
  • +
+
    +
  1. Hubtel USSD Mocker
  2. +
+
    +
  • https://github.com/hubtel/ussd-mocker
  • +
+
    +
  1. Rundeck
  2. +
+
    +
  • [DOCUMENTATION] https://docs.rundeck.com/docs/tutorials/
  • +
+
    +
  1. Jira
  2. +
+
    +
  • [COURSE] https://www.udemy.com/course/learn-jira-complete-from-scratch-to-expert/
  • +
+

Blogs:

+
    +
  1. [Automation] https://automationstepbystep.com/
  2. +
  3. [QA THOUGHTS] http://testerstories.com/
  4. +
  5. [TESTING] https://www.eviltester.com/
  6. +
  7. [AUTOMATION] https://testguild.com/
  8. +
  9. [TESTING] https://www.satisfice.com/
  10. +
  11. [QA METHODOLOGY] https://searchsoftwarequality.techtarget.com/
  12. +
  13. [QA] https://medium.com/tech-tajawal/tagged/qa
  14. +
  15. [TESTING] https://testfort.com/
  16. +
  17. [QA]http://kaner.com/
  18. +
  19. [TESTING] https://www.developsense.com/index.html
  20. +
  21. [TESTING] http://www.testingeducation.org/BBST/
  22. +
  23. [ASSOCIATION] https://www.associationforsoftwaretesting.org/
  24. +
  25. [BLOG] https://blog.scottlogic.com/category/test.html
  26. +
+

Tech topics

+
    +
  1. ISO 8583
  2. +
+
    +
  • [ARTICLE] https://www.codeproject.com/Articles/100084/Introduction-to-ISO
  • +
  • [ARTICLE] https://medium.com/plain-and-simple-series/all-things-tech-beautiful-iso-8583-an-introduction-plain-and-simple-21eb62455b28
  • +
+ +

QA-RESOURCES

+

Here I'll enlist the books, tutorials, articles or courses I've followed or following or will follow to master over the projects in my job. You can follow these to build a solid ground.In my opinion these are the detailed, free knowledge resources to learn.

+

Topics:

+ +

Books:

+
    +
  1. Lessons Learned in Software Testing
  2. +
  3. Bug Advocacy
  4. +
+

Courses:

+
    +
  1. [Coursera - Specialization] Software Development Lifecycle - University of Minnesota
  2. +
  3. [Coursera - Specialization] Software Testing and Automation Specialization - University of Minnesota
  4. +
  5. [Coursera - Course] Continuous Delivery & DevOps - University of Virginia
  6. +
+

Testing Tutorials

+
    +
  1. Exploratory Testing
  2. +
+ +

Tools:

+
    +
  1. Postman
  2. +
+ +
    +
  1. Jmeter
  2. +
+ +
    +
  1. Selenium
  2. +
+ +
    +
  1. Kafka
  2. +
+
    +
  • [TUTORIALS] https://www.youtube.com/watch?v=gg-VwXSRnmg&list=PLkz1SCf5iB4enAR00Z46JwY9GGkaS2NON
  • +
  • [TUTORIALS] https://data-flair.training/blogs/apache-kafka-tutorial/
  • +
  • [ARTICLES] https://hackernoon.com/thorough-introduction-to-apache-kafka-6fbf2989bbc1
  • +
  • [ARTICLES] https://hackernoon.com/apache-kafkas-distributed-system-firefighter-the-controller-broker-1afca1eae302
  • +
  • [ARTICLES] https://dzone.com/articles/a-quick-and-practical-example-of-kafka-testing
  • +
  • [ARTICLES] https://www.jeevora.com/2019/11/18/publish-subscribe-messaging-systems/
  • +
  • [BOOK] https://book.huihoo.com/pdf/confluent-kafka-definitive-guide-complete.pdf
  • +
  • [BOOK] https://www.pdfdrive.com/learning-apache-kafka-2nd-edition-start-from-scratch-and-learn-how-to-administer-apache-kafka-effectively-for-messaging-e167800256.html
  • +
+
    +
  1. Zookeeper
  2. +
+
    +
  • [TUTORIALS] https://data-flair.training/blogs/zookeeper-tutorial/
  • +
+
    +
  1. Hubtel USSD Mocker
  2. +
+
    +
  • https://github.com/hubtel/ussd-mocker
  • +
+
    +
  1. Rundeck
  2. +
+
    +
  • [DOCUMENTATION] https://docs.rundeck.com/docs/tutorials/
  • +
+
    +
  1. Jira
  2. +
+
    +
  • [COURSE] https://www.udemy.com/course/learn-jira-complete-from-scratch-to-expert/
  • +
+

Blogs:

+
    +
  1. [Automation] https://automationstepbystep.com/
  2. +
  3. [QA THOUGHTS] http://testerstories.com/
  4. +
  5. [TESTING] https://www.eviltester.com/
  6. +
  7. [AUTOMATION] https://testguild.com/
  8. +
  9. [TESTING] https://www.satisfice.com/
  10. +
  11. [QA METHODOLOGY] https://searchsoftwarequality.techtarget.com/
  12. +
  13. [QA] https://medium.com/tech-tajawal/tagged/qa
  14. +
  15. [TESTING] https://testfort.com/
  16. +
  17. [QA]http://kaner.com/
  18. +
  19. [TESTING] https://www.developsense.com/index.html
  20. +
  21. [TESTING] http://www.testingeducation.org/BBST/
  22. +
  23. [ASSOCIATION] https://www.associationforsoftwaretesting.org/
  24. +
  25. [BLOG] https://blog.scottlogic.com/category/test.html
  26. +
+

Tech topics

+
    +
  1. ISO 8583
  2. +
+
    +
  • [ARTICLE] https://www.codeproject.com/Articles/100084/Introduction-to-ISO
  • +
  • [ARTICLE] https://medium.com/plain-and-simple-series/all-things-tech-beautiful-iso-8583-an-introduction-plain-and-simple-21eb62455b28
  • +
+ +

QA-RESOURCES

+

Here I'll enlist the books, tutorials, articles or courses I've followed or following or will follow to master over the projects in my job. You can follow these to build a solid ground.In my opinion these are the detailed, free knowledge resources to learn.

+

Topics:

+ +

Books:

+
    +
  1. Lessons Learned in Software Testing
  2. +
  3. Bug Advocacy
  4. +
+

Courses:

+
    +
  1. [Coursera - Specialization] Software Development Lifecycle - University of Minnesota
  2. +
  3. [Coursera - Specialization] Software Testing and Automation Specialization - University of Minnesota
  4. +
  5. [Coursera - Course] Continuous Delivery & DevOps - University of Virginia
  6. +
+

Testing Tutorials

+
    +
  1. Exploratory Testing
  2. +
+ +

Tools:

+
    +
  1. Postman
  2. +
+ +
    +
  1. Jmeter
  2. +
+ +
    +
  1. Selenium
  2. +
+ +
    +
  1. Kafka
  2. +
+
    +
  • [TUTORIALS] https://www.youtube.com/watch?v=gg-VwXSRnmg&list=PLkz1SCf5iB4enAR00Z46JwY9GGkaS2NON
  • +
  • [TUTORIALS] https://data-flair.training/blogs/apache-kafka-tutorial/
  • +
  • [ARTICLES] https://hackernoon.com/thorough-introduction-to-apache-kafka-6fbf2989bbc1
  • +
  • [ARTICLES] https://hackernoon.com/apache-kafkas-distributed-system-firefighter-the-controller-broker-1afca1eae302
  • +
  • [ARTICLES] https://dzone.com/articles/a-quick-and-practical-example-of-kafka-testing
  • +
  • [ARTICLES] https://www.jeevora.com/2019/11/18/publish-subscribe-messaging-systems/
  • +
  • [BOOK] https://book.huihoo.com/pdf/confluent-kafka-definitive-guide-complete.pdf
  • +
  • [BOOK] https://www.pdfdrive.com/learning-apache-kafka-2nd-edition-start-from-scratch-and-learn-how-to-administer-apache-kafka-effectively-for-messaging-e167800256.html
  • +
+
    +
  1. Zookeeper
  2. +
+
    +
  • [TUTORIALS] https://data-flair.training/blogs/zookeeper-tutorial/
  • +
+
    +
  1. Hubtel USSD Mocker
  2. +
+
    +
  • https://github.com/hubtel/ussd-mocker
  • +
+
    +
  1. Rundeck
  2. +
+
    +
  • [DOCUMENTATION] https://docs.rundeck.com/docs/tutorials/
  • +
+
    +
  1. Jira
  2. +
+
    +
  • [COURSE] https://www.udemy.com/course/learn-jira-complete-from-scratch-to-expert/
  • +
+

Blogs:

+
    +
  1. [Automation] https://automationstepbystep.com/
  2. +
  3. [QA THOUGHTS] http://testerstories.com/
  4. +
  5. [TESTING] https://www.eviltester.com/
  6. +
  7. [AUTOMATION] https://testguild.com/
  8. +
  9. [TESTING] https://www.satisfice.com/
  10. +
  11. [QA METHODOLOGY] https://searchsoftwarequality.techtarget.com/
  12. +
  13. [QA] https://medium.com/tech-tajawal/tagged/qa
  14. +
  15. [TESTING] https://testfort.com/
  16. +
  17. [QA]http://kaner.com/
  18. +
  19. [TESTING] https://www.developsense.com/index.html
  20. +
  21. [TESTING] http://www.testingeducation.org/BBST/
  22. +
  23. [ASSOCIATION] https://www.associationforsoftwaretesting.org/
  24. +
  25. [BLOG] https://blog.scottlogic.com/category/test.html
  26. +
+

Tech topics

+
    +
  1. ISO 8583
  2. +
+
    +
  • [ARTICLE] https://www.codeproject.com/Articles/100084/Introduction-to-ISO
  • +
  • [ARTICLE] https://medium.com/plain-and-simple-series/all-things-tech-beautiful-iso-8583-an-introduction-plain-and-simple-21eb62455b28
  • +
+ +

QA-RESOURCES

+

Here I'll enlist the books, tutorials, articles or courses I've followed or following or will follow to master over the projects in my job. You can follow these to build a solid ground.In my opinion these are the detailed, free knowledge resources to learn.

+

Topics:

+ +

Books:

+
    +
  1. Lessons Learned in Software Testing
  2. +
  3. Bug Advocacy
  4. +
+

Courses:

+
    +
  1. [Coursera - Specialization] Software Development Lifecycle - University of Minnesota
  2. +
  3. [Coursera - Specialization] Software Testing and Automation Specialization - University of Minnesota
  4. +
  5. [Coursera - Course] Continuous Delivery & DevOps - University of Virginia
  6. +
+

Testing Tutorials

+
    +
  1. Exploratory Testing
  2. +
+ +

Tools:

+
    +
  1. Postman
  2. +
+ +
    +
  1. Jmeter
  2. +
+ +
    +
  1. Selenium
  2. +
+ +
    +
  1. Kafka
  2. +
+
    +
  • [TUTORIALS] https://www.youtube.com/watch?v=gg-VwXSRnmg&list=PLkz1SCf5iB4enAR00Z46JwY9GGkaS2NON
  • +
  • [TUTORIALS] https://data-flair.training/blogs/apache-kafka-tutorial/
  • +
  • [ARTICLES] https://hackernoon.com/thorough-introduction-to-apache-kafka-6fbf2989bbc1
  • +
  • [ARTICLES] https://hackernoon.com/apache-kafkas-distributed-system-firefighter-the-controller-broker-1afca1eae302
  • +
  • [ARTICLES] https://dzone.com/articles/a-quick-and-practical-example-of-kafka-testing
  • +
  • [ARTICLES] https://www.jeevora.com/2019/11/18/publish-subscribe-messaging-systems/
  • +
  • [BOOK] https://book.huihoo.com/pdf/confluent-kafka-definitive-guide-complete.pdf
  • +
  • [BOOK] https://www.pdfdrive.com/learning-apache-kafka-2nd-edition-start-from-scratch-and-learn-how-to-administer-apache-kafka-effectively-for-messaging-e167800256.html
  • +
+
    +
  1. Zookeeper
  2. +
+
    +
  • [TUTORIALS] https://data-flair.training/blogs/zookeeper-tutorial/
  • +
+
    +
  1. Hubtel USSD Mocker
  2. +
+
    +
  • https://github.com/hubtel/ussd-mocker
  • +
+
    +
  1. Rundeck
  2. +
+
    +
  • [DOCUMENTATION] https://docs.rundeck.com/docs/tutorials/
  • +
+
    +
  1. Jira
  2. +
+
    +
  • [COURSE] https://www.udemy.com/course/learn-jira-complete-from-scratch-to-expert/
  • +
+

Blogs:

+
    +
  1. [Automation] https://automationstepbystep.com/
  2. +
  3. [QA THOUGHTS] http://testerstories.com/
  4. +
  5. [TESTING] https://www.eviltester.com/
  6. +
  7. [AUTOMATION] https://testguild.com/
  8. +
  9. [TESTING] https://www.satisfice.com/
  10. +
  11. [QA METHODOLOGY] https://searchsoftwarequality.techtarget.com/
  12. +
  13. [QA] https://medium.com/tech-tajawal/tagged/qa
  14. +
  15. [TESTING] https://testfort.com/
  16. +
  17. [QA]http://kaner.com/
  18. +
  19. [TESTING] https://www.developsense.com/index.html
  20. +
  21. [TESTING] http://www.testingeducation.org/BBST/
  22. +
  23. [ASSOCIATION] https://www.associationforsoftwaretesting.org/
  24. +
  25. [BLOG] https://blog.scottlogic.com/category/test.html
  26. +
+

Tech topics

+
    +
  1. ISO 8583
  2. +
+
    +
  • [ARTICLE] https://www.codeproject.com/Articles/100084/Introduction-to-ISO
  • +
  • [ARTICLE] https://medium.com/plain-and-simple-series/all-things-tech-beautiful-iso-8583-an-introduction-plain-and-simple-21eb62455b28
  • +
+ +

QA-RESOURCES

+

Here I'll enlist the books, tutorials, articles or courses I've followed or following or will follow to master over the projects in my job. You can follow these to build a solid ground.In my opinion these are the detailed, free knowledge resources to learn.

+

Topics:

+ +

Books:

+
    +
  1. Lessons Learned in Software Testing
  2. +
  3. Bug Advocacy
  4. +
+

Courses:

+
    +
  1. [Coursera - Specialization] Software Development Lifecycle - University of Minnesota
  2. +
  3. [Coursera - Specialization] Software Testing and Automation Specialization - University of Minnesota
  4. +
  5. [Coursera - Course] Continuous Delivery & DevOps - University of Virginia
  6. +
+

Testing Tutorials

+
    +
  1. Exploratory Testing
  2. +
+ +

Tools:

+
    +
  1. Postman
  2. +
+ +
    +
  1. Jmeter
  2. +
+ +
    +
  1. Selenium
  2. +
+ +
    +
  1. Kafka
  2. +
+
    +
  • [TUTORIALS] https://www.youtube.com/watch?v=gg-VwXSRnmg&list=PLkz1SCf5iB4enAR00Z46JwY9GGkaS2NON
  • +
  • [TUTORIALS] https://data-flair.training/blogs/apache-kafka-tutorial/
  • +
  • [ARTICLES] https://hackernoon.com/thorough-introduction-to-apache-kafka-6fbf2989bbc1
  • +
  • [ARTICLES] https://hackernoon.com/apache-kafkas-distributed-system-firefighter-the-controller-broker-1afca1eae302
  • +
  • [ARTICLES] https://dzone.com/articles/a-quick-and-practical-example-of-kafka-testing
  • +
  • [ARTICLES] https://www.jeevora.com/2019/11/18/publish-subscribe-messaging-systems/
  • +
  • [BOOK] https://book.huihoo.com/pdf/confluent-kafka-definitive-guide-complete.pdf
  • +
  • [BOOK] https://www.pdfdrive.com/learning-apache-kafka-2nd-edition-start-from-scratch-and-learn-how-to-administer-apache-kafka-effectively-for-messaging-e167800256.html
  • +
+
    +
  1. Zookeeper
  2. +
+
    +
  • [TUTORIALS] https://data-flair.training/blogs/zookeeper-tutorial/
  • +
+
    +
  1. Hubtel USSD Mocker
  2. +
+
    +
  • https://github.com/hubtel/ussd-mocker
  • +
+
    +
  1. Rundeck
  2. +
+
    +
  • [DOCUMENTATION] https://docs.rundeck.com/docs/tutorials/
  • +
+
    +
  1. Jira
  2. +
+
    +
  • [COURSE] https://www.udemy.com/course/learn-jira-complete-from-scratch-to-expert/
  • +
+

Blogs:

+
    +
  1. [Automation] https://automationstepbystep.com/
  2. +
  3. [QA THOUGHTS] http://testerstories.com/
  4. +
  5. [TESTING] https://www.eviltester.com/
  6. +
  7. [AUTOMATION] https://testguild.com/
  8. +
  9. [TESTING] https://www.satisfice.com/
  10. +
  11. [QA METHODOLOGY] https://searchsoftwarequality.techtarget.com/
  12. +
  13. [QA] https://medium.com/tech-tajawal/tagged/qa
  14. +
  15. [TESTING] https://testfort.com/
  16. +
  17. [QA]http://kaner.com/
  18. +
  19. [TESTING] https://www.developsense.com/index.html
  20. +
  21. [TESTING] http://www.testingeducation.org/BBST/
  22. +
  23. [ASSOCIATION] https://www.associationforsoftwaretesting.org/
  24. +
  25. [BLOG] https://blog.scottlogic.com/category/test.html
  26. +
+

Tech topics

+
    +
  1. ISO 8583
  2. +
+
    +
  • [ARTICLE] https://www.codeproject.com/Articles/100084/Introduction-to-ISO
  • +
  • [ARTICLE] https://medium.com/plain-and-simple-series/all-things-tech-beautiful-iso-8583-an-introduction-plain-and-simple-21eb62455b28
  • +
diff --git a/components/fluent-ext/fluentqa-mindmap/README.md b/components/fluent-ext/fluentqa-mindmap/README.md new file mode 100644 index 0000000..f3eda4e --- /dev/null +++ b/components/fluent-ext/fluentqa-mindmap/README.md @@ -0,0 +1,25 @@ +# README + +Features: + - Read MindMap file to List,every item represents root to last leaf path + - Convert List to Mindmap Structure + +## TODO: + +- [X] Freemind Support +- [X] Xmind10+/XMIND-ZEN Support +- [] Xmind8 Support + +## How to Use + +1. README xmind file to beans +```java + +``` +2. REAMDE Freemind file to beans + +```java + +``` +3. Save Beans to Excel +4. Save Beans to CSV diff --git a/components/fluent-ext/fluentqa-mindmap/pom.xml b/components/fluent-ext/fluentqa-mindmap/pom.xml new file mode 100644 index 0000000..949f959 --- /dev/null +++ b/components/fluent-ext/fluentqa-mindmap/pom.xml @@ -0,0 +1,53 @@ + + + 4.0.0 + + io.fluentqa + fluent-ext + 1.0-SNAPSHOT + + + fluentqa-mindmap + + + 2.14.0 + + + + + org.dom4j + dom4j + 2.1.3 + + + + jakarta.xml.bind + jakarta.xml.bind-api + + + org.eclipse.angus + angus-activation + + + 4.0.0 + + + com.sun.xml.bind + jaxb-impl + 4.0.1 + runtime + + + com.fasterxml.jackson.dataformat + jackson-dataformat-xml + ${jackson-dataformat-xml.version} + + + io.fluentqa + fluent-builtin + ${fluent.version} + + + \ No newline at end of file diff --git a/components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/api/MindMapAccessor.java b/components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/api/MindMapAccessor.java new file mode 100644 index 0000000..e469d48 --- /dev/null +++ b/components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/api/MindMapAccessor.java @@ -0,0 +1,38 @@ +package io.fluentqa.mindmap.api; + +import io.fluentqa.mindmap.freemind.FreeMindTransformer; +import io.fluentqa.mindmap.xmind.XmindTransformer; + +import java.util.List; + + +public class MindMapAccessor { + + public List readMindMapToBean(String fileName, Class clazz){ + MindMapTransformer transformer = selectTransformer(fileName); + return transformer.readMindMapToList(fileName,clazz); + } + + public List readMindMapToBean(String fileName, Class clazz,MindMapConvertConfig config){ + MindMapTransformer transformer = selectTransformer(fileName); + return transformer.readMindMapToList(fileName,clazz,config); + } + public List readMindMap(String fileName) { + MindMapTransformer transformer = selectTransformer(fileName); + return transformer.readMindMapToList(fileName); + } + + private MindMapTransformer selectTransformer(String fileName) { + switch (MindmapTypeEnum.XMIND.parse(fileName)) { + case FREEMIND: + return new FreeMindTransformer(); + case XMIND: + default: + return new XmindTransformer(); + } + } + + + + +} diff --git a/components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/api/MindMapConvertConfig.java b/components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/api/MindMapConvertConfig.java new file mode 100644 index 0000000..e664d5a --- /dev/null +++ b/components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/api/MindMapConvertConfig.java @@ -0,0 +1,24 @@ +package io.fluentqa.mindmap.api; + +import lombok.AllArgsConstructor; +import lombok.Data; + +import java.util.ArrayList; +import java.util.List; + +@Data +public class MindMapConvertConfig { + private List configs = new ArrayList<>(); + + @Data + @AllArgsConstructor + public static class LevelConfig{ + private String key; + private Integer level; + } + + public MindMapConvertConfig add(LevelConfig config){ + this.configs.add(config); + return this; + } +} diff --git a/components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/api/MindMapPath.java b/components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/api/MindMapPath.java new file mode 100644 index 0000000..079d83c --- /dev/null +++ b/components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/api/MindMapPath.java @@ -0,0 +1,32 @@ +package io.fluentqa.mindmap.api; + +import lombok.Data; + +import java.util.LinkedList; + +@Data +public class MindMapPath implements Cloneable { + private T root; + + private LinkedList pathNodes = new LinkedList<>(); + + public MindMapPath(T root) { + this.root = root; + this.pathNodes.add(root); + } + + public T root() { + return root; + } + + public LinkedList pathNodes() { + return this.pathNodes; + } + + @Override + public MindMapPath clone() { + MindMapPath path = new MindMapPath(this.getRoot()); + path.setPathNodes((LinkedList) this.pathNodes.clone()); + return path; + } +} diff --git a/components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/api/MindMapPathRecord.java b/components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/api/MindMapPathRecord.java new file mode 100644 index 0000000..5ae69c8 --- /dev/null +++ b/components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/api/MindMapPathRecord.java @@ -0,0 +1,73 @@ +package io.fluentqa.mindmap.api; + +import cn.hutool.core.bean.BeanUtil; +import io.fluent.builtin.meta.ReflectionUtils; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; + +import java.lang.reflect.Field; +import java.util.*; +import java.util.function.Function; + + +@Data +@Slf4j +public class MindMapPathRecord { + private Map mindMapLevels = new HashMap<>(); + + private Integer currentLevel = 0; + + private synchronized void increaseTreeLevel() { + this.currentLevel++; + } + + public void add(String value) { + increaseTreeLevel(); + mindMapLevels.put(this.currentLevel, value); + } + + public Map getMindMapLevels() { + return mindMapLevels; + } + + + public T toBean(Class clazz, MindMapConvertConfig config) { + T instance = ReflectionUtils.newInstance(clazz); + for (MindMapConvertConfig.LevelConfig levelConfig : config.getConfigs()) { + try{ + BeanUtil.setFieldValue(instance, levelConfig.getKey(), this.mindMapLevels.get(levelConfig.getLevel())); + }catch (Exception e){ + log.error("ignore the error=",e); + } + } + return instance; + } + + public T toBean(Class clazz) { + T instance = ReflectionUtils.newInstance(clazz); + Field[] fields = ReflectionUtils.getFields(clazz); + for (Field field : fields) { + NodeLevel a = field.getAnnotation(NodeLevel.class); + if (a != null) { + ReflectionUtils.setFieldValue(instance, field, this.mindMapLevels.get(a.value())); + } + } + return instance; + } + + public static MindMapPathRecord fromMindMapPath(MindMapPath path, + Function extractValueFunc) { + MindMapPathRecord record = new MindMapPathRecord(); + for (T pathNode : path.getPathNodes()) { + record.add(extractValueFunc.apply(pathNode)); + } + return record; + } + + public static List fromMindMapPaths(List> paths, + Function extractValueFunc) { + List records = new ArrayList<>(); + paths.forEach((t) -> records.add(fromMindMapPath(t, extractValueFunc))); + return records; + } +} diff --git a/components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/api/MindMapTransformer.java b/components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/api/MindMapTransformer.java new file mode 100644 index 0000000..c343905 --- /dev/null +++ b/components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/api/MindMapTransformer.java @@ -0,0 +1,12 @@ +package io.fluentqa.mindmap.api; + +import java.util.List; + +public interface MindMapTransformer { + public List> readMindMapToList(String mindMapPath); + public List readMindMapToList(String mindMapPath,Class clazz); + public List readMindMapToList(String mindMapPath,Class clazz,MindMapConvertConfig config); + + + +} diff --git a/components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/api/MindmapTypeEnum.java b/components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/api/MindmapTypeEnum.java new file mode 100644 index 0000000..460060b --- /dev/null +++ b/components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/api/MindmapTypeEnum.java @@ -0,0 +1,31 @@ +package io.fluentqa.mindmap.api; + + +import io.fluent.builtin.JavaProjectFileUtils; + +public enum MindmapTypeEnum { + FREEMIND("mm"), //FREEMIND file + XMIND("xmind") //XMIND file + ; + + MindmapTypeEnum(String fileSuffix) { + this.fileSuffix = fileSuffix; + } + + private String fileSuffix; + + public String getFileSuffix() { + return fileSuffix; + } + + + public MindmapTypeEnum parse(String fileName){ + String suffix = JavaProjectFileUtils.getSuffix(fileName); + for (MindmapTypeEnum value : values()) { + if(value.getFileSuffix().equalsIgnoreCase(suffix)){ + return value; + } + } + return XMIND; + } +} diff --git a/components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/api/NodeLevel.java b/components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/api/NodeLevel.java new file mode 100644 index 0000000..e5cac9e --- /dev/null +++ b/components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/api/NodeLevel.java @@ -0,0 +1,13 @@ +package io.fluentqa.mindmap.api; + +import java.lang.annotation.*; + +/** + * + */ +@Retention(RetentionPolicy.RUNTIME) +@Target({ElementType.FIELD, ElementType.TYPE}) +@Documented +public @interface NodeLevel { + int value(); +} diff --git a/components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/exception/MindMapException.java b/components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/exception/MindMapException.java new file mode 100644 index 0000000..1ec0fa7 --- /dev/null +++ b/components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/exception/MindMapException.java @@ -0,0 +1,22 @@ +package io.fluentqa.mindmap.exception; + +public class MindMapException extends RuntimeException{ + public MindMapException() { + } + + public MindMapException(String message) { + super(message); + } + + public MindMapException(String message, Throwable cause) { + super(message, cause); + } + + public MindMapException(Throwable cause) { + super(cause); + } + + public MindMapException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) { + super(message, cause, enableSuppression, writableStackTrace); + } +} diff --git a/components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/freemind/FreeMindNode.java b/components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/freemind/FreeMindNode.java new file mode 100644 index 0000000..b0018ce --- /dev/null +++ b/components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/freemind/FreeMindNode.java @@ -0,0 +1,24 @@ +package io.fluentqa.mindmap.freemind; + +import io.fluentqa.mindmap.api.MindMapPath; +import io.fluentqa.mindmap.freemind.model.Node; + +public class FreeMindNode extends MindMapPath { + + public FreeMindNode(Node root) { + super(root); + } + + /** + * COPY nodes in new LinedList + * + * @return + */ +// @Override +// protected FreeMindNode clone() { +// FreeMindNode path = new FreeMindNode(this.getRoot()); +// path.setPathNodes((LinkedList) this.getPathNodes().clone()); +// return path; +// } + +} diff --git a/components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/freemind/FreeMindTransformer.java b/components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/freemind/FreeMindTransformer.java new file mode 100644 index 0000000..06860db --- /dev/null +++ b/components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/freemind/FreeMindTransformer.java @@ -0,0 +1,86 @@ +package io.fluentqa.mindmap.freemind; + +import io.fluent.builtin.XmlUtils; +import io.fluentqa.mindmap.api.MindMapConvertConfig; +import io.fluentqa.mindmap.api.MindMapPath; +import io.fluentqa.mindmap.api.MindMapPathRecord; +import io.fluentqa.mindmap.api.MindMapTransformer; +import io.fluentqa.mindmap.freemind.model.Map; +import io.fluentqa.mindmap.freemind.model.Node; + + +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +/** + * 1. READ FreeMind Files + * 2. Convert + */ +public class FreeMindTransformer implements MindMapTransformer { + + + @Override + public List> readMindMapToList(String mindMapContent) { + return convertToList(mindMapContent); + } + + @Override + public List readMindMapToList(String mindMapPath, Class clazz) { + List> paths = convertToList(mindMapPath); + List records = MindMapPathRecord.fromMindMapPaths(paths,Node::getTEXT); + return records.stream().map(mindMapPathRecord -> mindMapPathRecord.toBean(clazz)).collect(Collectors.toList()); + } + + @Override + public List readMindMapToList(String mindMapPath, Class clazz, MindMapConvertConfig config) { + List> paths = convertToList(mindMapPath); + List records = MindMapPathRecord.fromMindMapPaths(paths,Node::getTEXT); + return records.stream().map(mindMapPathRecord -> mindMapPathRecord.toBean(clazz,config)).collect(Collectors.toList()); + } + + private List> convertToList(String mindmapFilePath) { + Map freeMindMap = XmlUtils.readXmlToObject(XmlUtils.readXML(mindmapFilePath), Map.class); + FreeMindNode root = new FreeMindNode(freeMindMap.getNode()); + List> result = new ArrayList<>(); + populateNodes(List.of(root), result); + return result; + } + + /** + * ->Node1 + * currentNode | + * ->Node2 + * convert to: + * [ currentNode->Node1, + * currentNode->Node2] + * + * @param current: Current Node + * @return OUT: A List of MindMapPath + */ + private List> populateNextLevel(MindMapPath current) { + Node lastNode = current.pathNodes().getLast(); + List> mindMapPaths = new ArrayList<>(); + for (Object o : lastNode.getArrowlinkOrAttributeOrAttributeLayout()) { + MindMapPath path = current.clone(); + if (o instanceof Node) { + path.pathNodes().add((Node) o); + } + mindMapPaths.add(path); + } + + return mindMapPaths; + } + + + private void populateNodes(List> nodes, List> resultPaths) { + + for (MindMapPath current : nodes) { + if (current.pathNodes().getLast().getArrowlinkOrAttributeOrAttributeLayout().size() == 0) { + resultPaths.add(current); + } else { + populateNodes(populateNextLevel(current), resultPaths); + } + } + } +} diff --git a/components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/freemind/model/Arrowlink.java b/components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/freemind/model/Arrowlink.java new file mode 100644 index 0000000..d2118cc --- /dev/null +++ b/components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/freemind/model/Arrowlink.java @@ -0,0 +1,225 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.2.8-b130911.1802 生成的 +// 请访问 http://java.sun.com/xml/jaxb +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 2022.09.23 时间 08:46:06 PM CST +// + + +package io.fluentqa.mindmap.freemind.model; + +import jakarta.xml.bind.annotation.*; + + +/** + *

anonymous complex type的 Java 类。 + * + *

以下模式片段指定包含在此类中的预期内容。 + * + *

+ * <complexType>
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <attribute name="COLOR" type="{http://www.w3.org/2001/XMLSchema}string" />
+ *       <attribute name="DESTINATION" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
+ *       <attribute name="ENDARROW" type="{http://www.w3.org/2001/XMLSchema}string" />
+ *       <attribute name="ENDINCLINATION" type="{http://www.w3.org/2001/XMLSchema}string" />
+ *       <attribute name="ID" type="{http://www.w3.org/2001/XMLSchema}string" />
+ *       <attribute name="STARTARROW" type="{http://www.w3.org/2001/XMLSchema}string" />
+ *       <attribute name="STARTINCLINATION" type="{http://www.w3.org/2001/XMLSchema}string" />
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "") +@XmlRootElement(name = "arrowlink") +public class Arrowlink { + + @XmlAttribute(name = "COLOR") + protected String color; + @XmlAttribute(name = "DESTINATION", required = true) + protected String destination; + @XmlAttribute(name = "ENDARROW") + protected String endarrow; + @XmlAttribute(name = "ENDINCLINATION") + protected String endinclination; + @XmlAttribute(name = "ID") + protected String id; + @XmlAttribute(name = "STARTARROW") + protected String startarrow; + @XmlAttribute(name = "STARTINCLINATION") + protected String startinclination; + + /** + * 获取color属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getCOLOR() { + return color; + } + + /** + * 设置color属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setCOLOR(String value) { + this.color = value; + } + + /** + * 获取destination属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getDESTINATION() { + return destination; + } + + /** + * 设置destination属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setDESTINATION(String value) { + this.destination = value; + } + + /** + * 获取endarrow属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getENDARROW() { + return endarrow; + } + + /** + * 设置endarrow属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setENDARROW(String value) { + this.endarrow = value; + } + + /** + * 获取endinclination属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getENDINCLINATION() { + return endinclination; + } + + /** + * 设置endinclination属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setENDINCLINATION(String value) { + this.endinclination = value; + } + + /** + * 获取id属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getID() { + return id; + } + + /** + * 设置id属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setID(String value) { + this.id = value; + } + + /** + * 获取startarrow属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getSTARTARROW() { + return startarrow; + } + + /** + * 设置startarrow属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setSTARTARROW(String value) { + this.startarrow = value; + } + + /** + * 获取startinclination属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getSTARTINCLINATION() { + return startinclination; + } + + /** + * 设置startinclination属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setSTARTINCLINATION(String value) { + this.startinclination = value; + } + +} diff --git a/components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/freemind/model/Attribute.java b/components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/freemind/model/Attribute.java new file mode 100644 index 0000000..c9acb47 --- /dev/null +++ b/components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/freemind/model/Attribute.java @@ -0,0 +1,90 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.2.8-b130911.1802 生成的 +// 请访问 http://java.sun.com/xml/jaxb +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 2022.09.23 时间 08:46:06 PM CST +// + + +package io.fluentqa.mindmap.freemind.model; + +import jakarta.xml.bind.annotation.*; + + +/** + *

anonymous complex type的 Java 类。 + * + *

以下模式片段指定包含在此类中的预期内容。 + * + *

+ * <complexType>
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <attribute name="NAME" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
+ *       <attribute name="VALUE" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "") +@XmlRootElement(name = "attribute") +public class Attribute { + + @XmlAttribute(name = "NAME", required = true) + protected String name; + @XmlAttribute(name = "VALUE", required = true) + protected String value; + + /** + * 获取name属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getNAME() { + return name; + } + + /** + * 设置name属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setNAME(String value) { + this.name = value; + } + + /** + * 获取value属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getVALUE() { + return value; + } + + /** + * 设置value属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setVALUE(String value) { + this.value = value; + } + +} diff --git a/components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/freemind/model/AttributeLayout.java b/components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/freemind/model/AttributeLayout.java new file mode 100644 index 0000000..e15a94b --- /dev/null +++ b/components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/freemind/model/AttributeLayout.java @@ -0,0 +1,92 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.2.8-b130911.1802 生成的 +// 请访问 http://java.sun.com/xml/jaxb +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 2022.09.23 时间 08:46:06 PM CST +// + + +package io.fluentqa.mindmap.freemind.model; + +import jakarta.xml.bind.annotation.*; + +import java.math.BigInteger; + + +/** + *

anonymous complex type的 Java 类。 + * + *

以下模式片段指定包含在此类中的预期内容。 + * + *

+ * <complexType>
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <attribute name="NAME_WIDTH" use="required" type="{http://www.w3.org/2001/XMLSchema}integer" />
+ *       <attribute name="VALUE_WIDTH" type="{http://www.w3.org/2001/XMLSchema}integer" />
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "") +@XmlRootElement(name = "attribute_layout") +public class AttributeLayout { + + @XmlAttribute(name = "NAME_WIDTH", required = true) + protected BigInteger namewidth; + @XmlAttribute(name = "VALUE_WIDTH") + protected BigInteger valuewidth; + + /** + * 获取namewidth属性的值。 + * + * @return + * possible object is + * {@link BigInteger } + * + */ + public BigInteger getNAMEWIDTH() { + return namewidth; + } + + /** + * 设置namewidth属性的值。 + * + * @param value + * allowed object is + * {@link BigInteger } + * + */ + public void setNAMEWIDTH(BigInteger value) { + this.namewidth = value; + } + + /** + * 获取valuewidth属性的值。 + * + * @return + * possible object is + * {@link BigInteger } + * + */ + public BigInteger getVALUEWIDTH() { + return valuewidth; + } + + /** + * 设置valuewidth属性的值。 + * + * @param value + * allowed object is + * {@link BigInteger } + * + */ + public void setVALUEWIDTH(BigInteger value) { + this.valuewidth = value; + } + +} diff --git a/components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/freemind/model/Cloud.java b/components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/freemind/model/Cloud.java new file mode 100644 index 0000000..b3e1e2a --- /dev/null +++ b/components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/freemind/model/Cloud.java @@ -0,0 +1,63 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.2.8-b130911.1802 生成的 +// 请访问 http://java.sun.com/xml/jaxb +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 2022.09.23 时间 08:46:06 PM CST +// + + +package io.fluentqa.mindmap.freemind.model; + +import jakarta.xml.bind.annotation.*; + + +/** + *

anonymous complex type的 Java 类。 + * + *

以下模式片段指定包含在此类中的预期内容。 + * + *

+ * <complexType>
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <attribute name="COLOR" type="{http://www.w3.org/2001/XMLSchema}string" />
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "") +@XmlRootElement(name = "cloud") +public class Cloud { + + @XmlAttribute(name = "COLOR") + protected String color; + + /** + * 获取color属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getCOLOR() { + return color; + } + + /** + * 设置color属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setCOLOR(String value) { + this.color = value; + } + +} diff --git a/components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/freemind/model/Edge.java b/components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/freemind/model/Edge.java new file mode 100644 index 0000000..a3ff7d2 --- /dev/null +++ b/components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/freemind/model/Edge.java @@ -0,0 +1,117 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.2.8-b130911.1802 生成的 +// 请访问 http://java.sun.com/xml/jaxb +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 2022.09.23 时间 08:46:06 PM CST +// + + +package io.fluentqa.mindmap.freemind.model; + +import jakarta.xml.bind.annotation.*; + + +/** + *

anonymous complex type的 Java 类。 + * + *

以下模式片段指定包含在此类中的预期内容。 + * + *

+ * <complexType>
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <attribute name="COLOR" type="{http://www.w3.org/2001/XMLSchema}string" />
+ *       <attribute name="STYLE" type="{http://www.w3.org/2001/XMLSchema}string" />
+ *       <attribute name="WIDTH" type="{http://www.w3.org/2001/XMLSchema}string" />
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "") +@XmlRootElement(name = "edge") +public class Edge { + + @XmlAttribute(name = "COLOR") + protected String color; + @XmlAttribute(name = "STYLE") + protected String style; + @XmlAttribute(name = "WIDTH") + protected String width; + + /** + * 获取color属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getCOLOR() { + return color; + } + + /** + * 设置color属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setCOLOR(String value) { + this.color = value; + } + + /** + * 获取style属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getSTYLE() { + return style; + } + + /** + * 设置style属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setSTYLE(String value) { + this.style = value; + } + + /** + * 获取width属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getWIDTH() { + return width; + } + + /** + * 设置width属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setWIDTH(String value) { + this.width = value; + } + +} diff --git a/components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/freemind/model/Font.java b/components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/freemind/model/Font.java new file mode 100644 index 0000000..1c81a7d --- /dev/null +++ b/components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/freemind/model/Font.java @@ -0,0 +1,159 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.2.8-b130911.1802 生成的 +// 请访问 http://java.sun.com/xml/jaxb +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 2022.09.23 时间 08:46:06 PM CST +// + + +package io.fluentqa.mindmap.freemind.model; + +import jakarta.xml.bind.annotation.*; + +import java.math.BigInteger; + + +/** + *

anonymous complex type的 Java 类。 + * + *

以下模式片段指定包含在此类中的预期内容。 + * + *

+ * <complexType>
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <attribute name="BOLD">
+ *         <simpleType>
+ *           <restriction base="{http://www.w3.org/2001/XMLSchema}string">
+ *             <enumeration value="true"/>
+ *           </restriction>
+ *         </simpleType>
+ *       </attribute>
+ *       <attribute name="ITALIC">
+ *         <simpleType>
+ *           <restriction base="{http://www.w3.org/2001/XMLSchema}string">
+ *             <enumeration value="true"/>
+ *             <enumeration value="false"/>
+ *           </restriction>
+ *         </simpleType>
+ *       </attribute>
+ *       <attribute name="NAME" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
+ *       <attribute name="SIZE" use="required" type="{http://www.w3.org/2001/XMLSchema}integer" />
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "") +@XmlRootElement(name = "font") +public class Font { + + @XmlAttribute(name = "BOLD") + protected String bold; + @XmlAttribute(name = "ITALIC") + protected String italic; + @XmlAttribute(name = "NAME", required = true) + protected String name; + @XmlAttribute(name = "SIZE", required = true) + protected BigInteger size; + + /** + * 获取bold属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getBOLD() { + return bold; + } + + /** + * 设置bold属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setBOLD(String value) { + this.bold = value; + } + + /** + * 获取italic属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getITALIC() { + return italic; + } + + /** + * 设置italic属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setITALIC(String value) { + this.italic = value; + } + + /** + * 获取name属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getNAME() { + return name; + } + + /** + * 设置name属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setNAME(String value) { + this.name = value; + } + + /** + * 获取size属性的值。 + * + * @return + * possible object is + * {@link BigInteger } + * + */ + public BigInteger getSIZE() { + return size; + } + + /** + * 设置size属性的值。 + * + * @param value + * allowed object is + * {@link BigInteger } + * + */ + public void setSIZE(BigInteger value) { + this.size = value; + } + +} diff --git a/components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/freemind/model/Hook.java b/components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/freemind/model/Hook.java new file mode 100644 index 0000000..83a4943 --- /dev/null +++ b/components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/freemind/model/Hook.java @@ -0,0 +1,121 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.2.8-b130911.1802 生成的 +// 请访问 http://java.sun.com/xml/jaxb +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 2022.09.23 时间 08:46:06 PM CST +// + + +package io.fluentqa.mindmap.freemind.model; + +import jakarta.xml.bind.annotation.*; + + +/** + *

anonymous complex type的 Java 类。 + * + *

以下模式片段指定包含在此类中的预期内容。 + * + *

+ * <complexType>
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <sequence>
+ *         <element ref="{}Parameters" minOccurs="0"/>
+ *         <element ref="{}text" minOccurs="0"/>
+ *       </sequence>
+ *       <attribute name="NAME" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "", propOrder = { + "parameters", + "text" +}) +@XmlRootElement(name = "hook") +public class Hook { + + @XmlElement(name = "Parameters") + protected Parameters parameters; + protected Text text; + @XmlAttribute(name = "NAME", required = true) + protected String name; + + /** + * 获取parameters属性的值。 + * + * @return + * possible object is + * {@link Parameters } + * + */ + public Parameters getParameters() { + return parameters; + } + + /** + * 设置parameters属性的值。 + * + * @param value + * allowed object is + * {@link Parameters } + * + */ + public void setParameters(Parameters value) { + this.parameters = value; + } + + /** + * 获取text属性的值。 + * + * @return + * possible object is + * {@link Text } + * + */ + public Text getText() { + return text; + } + + /** + * 设置text属性的值。 + * + * @param value + * allowed object is + * {@link Text } + * + */ + public void setText(Text value) { + this.text = value; + } + + /** + * 获取name属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getNAME() { + return name; + } + + /** + * 设置name属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setNAME(String value) { + this.name = value; + } + +} diff --git a/components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/freemind/model/Html.java b/components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/freemind/model/Html.java new file mode 100644 index 0000000..eb0a40c --- /dev/null +++ b/components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/freemind/model/Html.java @@ -0,0 +1,76 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.2.8-b130911.1802 生成的 +// 请访问 http://java.sun.com/xml/jaxb +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 2022.09.23 时间 08:46:06 PM CST +// + + +package io.fluentqa.mindmap.freemind.model; + +import jakarta.xml.bind.annotation.*; +import org.w3c.dom.Element; + +import java.util.ArrayList; +import java.util.List; + + +/** + *

anonymous complex type的 Java 类。 + * + *

以下模式片段指定包含在此类中的预期内容。 + * + *

+ * <complexType>
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <sequence>
+ *         <any processContents='skip' maxOccurs="unbounded" minOccurs="0"/>
+ *       </sequence>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "", propOrder = { + "any" +}) +@XmlRootElement(name = "html") +public class Html { + + @XmlAnyElement + protected List any; + + /** + * Gets the value of the any property. + * + *

+ * This accessor method returns a reference to the live list, + * not a snapshot. Therefore any modification you make to the + * returned list will be present inside the JAXB object. + * This is why there is not a set method for the any property. + * + *

+ * For example, to add a new item, do as follows: + *

+     *    getAny().add(newItem);
+     * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link Element } + * + * + */ + public List getAny() { + if (any == null) { + any = new ArrayList(); + } + return this.any; + } + +} diff --git a/components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/freemind/model/Icon.java b/components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/freemind/model/Icon.java new file mode 100644 index 0000000..cfe3673 --- /dev/null +++ b/components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/freemind/model/Icon.java @@ -0,0 +1,63 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.2.8-b130911.1802 生成的 +// 请访问 http://java.sun.com/xml/jaxb +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 2022.09.23 时间 08:46:06 PM CST +// + + +package io.fluentqa.mindmap.freemind.model; + +import jakarta.xml.bind.annotation.*; + + +/** + *

anonymous complex type的 Java 类。 + * + *

以下模式片段指定包含在此类中的预期内容。 + * + *

+ * <complexType>
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <attribute name="BUILTIN" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "") +@XmlRootElement(name = "icon") +public class Icon { + + @XmlAttribute(name = "BUILTIN", required = true) + protected String builtin; + + /** + * 获取builtin属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getBUILTIN() { + return builtin; + } + + /** + * 设置builtin属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setBUILTIN(String value) { + this.builtin = value; + } + +} diff --git a/components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/freemind/model/Linktarget.java b/components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/freemind/model/Linktarget.java new file mode 100644 index 0000000..957ec51 --- /dev/null +++ b/components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/freemind/model/Linktarget.java @@ -0,0 +1,252 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.2.8-b130911.1802 生成的 +// 请访问 http://java.sun.com/xml/jaxb +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 2022.09.23 时间 08:46:06 PM CST +// + + +package io.fluentqa.mindmap.freemind.model; + +import jakarta.xml.bind.annotation.*; + + +/** + *

anonymous complex type的 Java 类。 + * + *

以下模式片段指定包含在此类中的预期内容。 + * + *

+ * <complexType>
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <attribute name="COLOR" type="{http://www.w3.org/2001/XMLSchema}string" />
+ *       <attribute name="SOURCE" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
+ *       <attribute name="DESTINATION" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
+ *       <attribute name="ENDARROW" type="{http://www.w3.org/2001/XMLSchema}string" />
+ *       <attribute name="ENDINCLINATION" type="{http://www.w3.org/2001/XMLSchema}string" />
+ *       <attribute name="ID" type="{http://www.w3.org/2001/XMLSchema}string" />
+ *       <attribute name="STARTARROW" type="{http://www.w3.org/2001/XMLSchema}string" />
+ *       <attribute name="STARTINCLINATION" type="{http://www.w3.org/2001/XMLSchema}string" />
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "") +@XmlRootElement(name = "linktarget") +public class Linktarget { + + @XmlAttribute(name = "COLOR") + protected String color; + @XmlAttribute(name = "SOURCE", required = true) + protected String source; + @XmlAttribute(name = "DESTINATION", required = true) + protected String destination; + @XmlAttribute(name = "ENDARROW") + protected String endarrow; + @XmlAttribute(name = "ENDINCLINATION") + protected String endinclination; + @XmlAttribute(name = "ID") + protected String id; + @XmlAttribute(name = "STARTARROW") + protected String startarrow; + @XmlAttribute(name = "STARTINCLINATION") + protected String startinclination; + + /** + * 获取color属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getCOLOR() { + return color; + } + + /** + * 设置color属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setCOLOR(String value) { + this.color = value; + } + + /** + * 获取source属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getSOURCE() { + return source; + } + + /** + * 设置source属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setSOURCE(String value) { + this.source = value; + } + + /** + * 获取destination属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getDESTINATION() { + return destination; + } + + /** + * 设置destination属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setDESTINATION(String value) { + this.destination = value; + } + + /** + * 获取endarrow属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getENDARROW() { + return endarrow; + } + + /** + * 设置endarrow属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setENDARROW(String value) { + this.endarrow = value; + } + + /** + * 获取endinclination属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getENDINCLINATION() { + return endinclination; + } + + /** + * 设置endinclination属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setENDINCLINATION(String value) { + this.endinclination = value; + } + + /** + * 获取id属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getID() { + return id; + } + + /** + * 设置id属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setID(String value) { + this.id = value; + } + + /** + * 获取startarrow属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getSTARTARROW() { + return startarrow; + } + + /** + * 设置startarrow属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setSTARTARROW(String value) { + this.startarrow = value; + } + + /** + * 获取startinclination属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getSTARTINCLINATION() { + return startinclination; + } + + /** + * 设置startinclination属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setSTARTINCLINATION(String value) { + this.startinclination = value; + } + +} diff --git a/components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/freemind/model/Map.java b/components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/freemind/model/Map.java new file mode 100644 index 0000000..63db26e --- /dev/null +++ b/components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/freemind/model/Map.java @@ -0,0 +1,96 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.2.8-b130911.1802 生成的 +// 请访问 http://java.sun.com/xml/jaxb +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 2022.09.23 时间 08:46:06 PM CST +// + + +package io.fluentqa.mindmap.freemind.model; + + + +import jakarta.xml.bind.annotation.*; + + +/** + *

anonymous complex type的 Java 类。 + * + *

以下模式片段指定包含在此类中的预期内容。 + * + *

+ * <complexType>
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <sequence>
+ *         <element ref="{}node"/>
+ *       </sequence>
+ *       <attribute name="version" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "", propOrder = { + "node" +}) +@XmlRootElement(name = "map") +public class Map { + + @XmlElement(required = true) + protected Node node; + @XmlAttribute(name = "version", required = true) + protected String version; + + /** + * 获取node属性的值。 + * + * @return + * possible object is + * {@link Node } + * + */ + public Node getNode() { + return node; + } + + /** + * 设置node属性的值。 + * + * @param value + * allowed object is + * {@link Node } + * + */ + public void setNode(Node value) { + this.node = value; + } + + /** + * 获取version属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getVersion() { + return version; + } + + /** + * 设置version属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setVersion(String value) { + this.version = value; + } + +} diff --git a/components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/freemind/model/Node.java b/components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/freemind/model/Node.java new file mode 100644 index 0000000..64418bf --- /dev/null +++ b/components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/freemind/model/Node.java @@ -0,0 +1,505 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.2.8-b130911.1802 生成的 +// 请访问 http://java.sun.com/xml/jaxb +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 2022.09.23 时间 08:46:06 PM CST +// + + +package io.fluentqa.mindmap.freemind.model; + +import jakarta.xml.bind.annotation.*; +import jakarta.xml.bind.annotation.adapters.CollapsedStringAdapter; +import jakarta.xml.bind.annotation.adapters.XmlJavaTypeAdapter; + +import java.math.BigInteger; +import java.util.ArrayList; +import java.util.List; + + +/** + *

anonymous complex type的 Java 类。 + * + *

以下模式片段指定包含在此类中的预期内容。 + * + *

+ * <complexType>
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <choice maxOccurs="unbounded" minOccurs="0">
+ *         <element ref="{}arrowlink"/>
+ *         <element ref="{}attribute"/>
+ *         <element ref="{}attribute_layout"/>
+ *         <element ref="{}linktarget"/>
+ *         <element ref="{}cloud"/>
+ *         <element ref="{}edge"/>
+ *         <element ref="{}font"/>
+ *         <element ref="{}hook"/>
+ *         <element ref="{}icon"/>
+ *         <element ref="{}node"/>
+ *         <element ref="{}richcontent"/>
+ *       </choice>
+ *       <attribute name="BACKGROUND_COLOR" type="{http://www.w3.org/2001/XMLSchema}string" />
+ *       <attribute name="COLOR" type="{http://www.w3.org/2001/XMLSchema}string" />
+ *       <attribute name="FOLDED">
+ *         <simpleType>
+ *           <restriction base="{http://www.w3.org/2001/XMLSchema}string">
+ *             <enumeration value="true"/>
+ *             <enumeration value="false"/>
+ *           </restriction>
+ *         </simpleType>
+ *       </attribute>
+ *       <attribute name="ID" type="{http://www.w3.org/2001/XMLSchema}ID" />
+ *       <attribute name="LINK" type="{http://www.w3.org/2001/XMLSchema}string" />
+ *       <attribute name="POSITION">
+ *         <simpleType>
+ *           <restriction base="{http://www.w3.org/2001/XMLSchema}string">
+ *             <enumeration value="left"/>
+ *             <enumeration value="right"/>
+ *           </restriction>
+ *         </simpleType>
+ *       </attribute>
+ *       <attribute name="STYLE" type="{http://www.w3.org/2001/XMLSchema}string" />
+ *       <attribute name="TEXT" type="{http://www.w3.org/2001/XMLSchema}string" />
+ *       <attribute name="CREATED" type="{http://www.w3.org/2001/XMLSchema}integer" />
+ *       <attribute name="MODIFIED" type="{http://www.w3.org/2001/XMLSchema}integer" />
+ *       <attribute name="HGAP" type="{http://www.w3.org/2001/XMLSchema}integer" />
+ *       <attribute name="VGAP" type="{http://www.w3.org/2001/XMLSchema}integer" />
+ *       <attribute name="VSHIFT" type="{http://www.w3.org/2001/XMLSchema}integer" />
+ *       <attribute name="ENCRYPTED_CONTENT" type="{http://www.w3.org/2001/XMLSchema}string" />
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "", propOrder = { + "arrowlinkOrAttributeOrAttributeLayout" +}) +@XmlRootElement(name = "node") +public class Node { + + @XmlElements({ + @XmlElement(name = "arrowlink", type = Arrowlink.class), + @XmlElement(name = "attribute", type = Attribute.class), + @XmlElement(name = "attribute_layout", type = AttributeLayout.class), + @XmlElement(name = "linktarget", type = Linktarget.class), + @XmlElement(name = "cloud", type = Cloud.class), + @XmlElement(name = "edge", type = Edge.class), + @XmlElement(name = "font", type = Font.class), + @XmlElement(name = "hook", type = Hook.class), + @XmlElement(name = "icon", type = Icon.class), + @XmlElement(name = "node", type = Node.class), + @XmlElement(name = "richcontent", type = Richcontent.class) + }) + protected List arrowlinkOrAttributeOrAttributeLayout; + @XmlAttribute(name = "BACKGROUND_COLOR") + protected String backgroundcolor; + @XmlAttribute(name = "COLOR") + protected String color; + @XmlAttribute(name = "FOLDED") + protected String folded; + @XmlAttribute(name = "ID") + @XmlJavaTypeAdapter(CollapsedStringAdapter.class) + @XmlID + @XmlSchemaType(name = "ID") + protected String id; + @XmlAttribute(name = "LINK") + protected String link; + @XmlAttribute(name = "POSITION") + protected String position; + @XmlAttribute(name = "STYLE") + protected String style; + @XmlAttribute(name = "TEXT") + protected String text; + @XmlAttribute(name = "CREATED") + protected BigInteger created; + @XmlAttribute(name = "MODIFIED") + protected BigInteger modified; + @XmlAttribute(name = "HGAP") + protected BigInteger hgap; + @XmlAttribute(name = "VGAP") + protected BigInteger vgap; + @XmlAttribute(name = "VSHIFT") + protected BigInteger vshift; + @XmlAttribute(name = "ENCRYPTED_CONTENT") + protected String encryptedcontent; + + /** + * Gets the value of the arrowlinkOrAttributeOrAttributeLayout property. + * + *

+ * This accessor method returns a reference to the live list, + * not a snapshot. Therefore any modification you make to the + * returned list will be present inside the JAXB object. + * This is why there is not a set method for the arrowlinkOrAttributeOrAttributeLayout property. + * + *

+ * For example, to add a new item, do as follows: + *

+     *    getArrowlinkOrAttributeOrAttributeLayout().add(newItem);
+     * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link Arrowlink } + * {@link Attribute } + * {@link AttributeLayout } + * {@link Linktarget } + * {@link Cloud } + * {@link Edge } + * {@link Font } + * {@link Hook } + * {@link Icon } + * {@link Node } + * {@link Richcontent } + * + * + */ + public List getArrowlinkOrAttributeOrAttributeLayout() { + if (arrowlinkOrAttributeOrAttributeLayout == null) { + arrowlinkOrAttributeOrAttributeLayout = new ArrayList(); + } + return this.arrowlinkOrAttributeOrAttributeLayout; + } + + /** + * 获取backgroundcolor属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getBACKGROUNDCOLOR() { + return backgroundcolor; + } + + /** + * 设置backgroundcolor属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setBACKGROUNDCOLOR(String value) { + this.backgroundcolor = value; + } + + /** + * 获取color属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getCOLOR() { + return color; + } + + /** + * 设置color属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setCOLOR(String value) { + this.color = value; + } + + /** + * 获取folded属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getFOLDED() { + return folded; + } + + /** + * 设置folded属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setFOLDED(String value) { + this.folded = value; + } + + /** + * 获取id属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getID() { + return id; + } + + /** + * 设置id属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setID(String value) { + this.id = value; + } + + /** + * 获取link属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getLINK() { + return link; + } + + /** + * 设置link属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setLINK(String value) { + this.link = value; + } + + /** + * 获取position属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getPOSITION() { + return position; + } + + /** + * 设置position属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setPOSITION(String value) { + this.position = value; + } + + /** + * 获取style属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getSTYLE() { + return style; + } + + /** + * 设置style属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setSTYLE(String value) { + this.style = value; + } + + /** + * 获取text属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getTEXT() { + return text; + } + + /** + * 设置text属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setTEXT(String value) { + this.text = value; + } + + /** + * 获取created属性的值。 + * + * @return + * possible object is + * {@link BigInteger } + * + */ + public BigInteger getCREATED() { + return created; + } + + /** + * 设置created属性的值。 + * + * @param value + * allowed object is + * {@link BigInteger } + * + */ + public void setCREATED(BigInteger value) { + this.created = value; + } + + /** + * 获取modified属性的值。 + * + * @return + * possible object is + * {@link BigInteger } + * + */ + public BigInteger getMODIFIED() { + return modified; + } + + /** + * 设置modified属性的值。 + * + * @param value + * allowed object is + * {@link BigInteger } + * + */ + public void setMODIFIED(BigInteger value) { + this.modified = value; + } + + /** + * 获取hgap属性的值。 + * + * @return + * possible object is + * {@link BigInteger } + * + */ + public BigInteger getHGAP() { + return hgap; + } + + /** + * 设置hgap属性的值。 + * + * @param value + * allowed object is + * {@link BigInteger } + * + */ + public void setHGAP(BigInteger value) { + this.hgap = value; + } + + /** + * 获取vgap属性的值。 + * + * @return + * possible object is + * {@link BigInteger } + * + */ + public BigInteger getVGAP() { + return vgap; + } + + /** + * 设置vgap属性的值。 + * + * @param value + * allowed object is + * {@link BigInteger } + * + */ + public void setVGAP(BigInteger value) { + this.vgap = value; + } + + /** + * 获取vshift属性的值。 + * + * @return + * possible object is + * {@link BigInteger } + * + */ + public BigInteger getVSHIFT() { + return vshift; + } + + /** + * 设置vshift属性的值。 + * + * @param value + * allowed object is + * {@link BigInteger } + * + */ + public void setVSHIFT(BigInteger value) { + this.vshift = value; + } + + /** + * 获取encryptedcontent属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getENCRYPTEDCONTENT() { + return encryptedcontent; + } + + /** + * 设置encryptedcontent属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setENCRYPTEDCONTENT(String value) { + this.encryptedcontent = value; + } + +} diff --git a/components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/freemind/model/ObjectFactory.java b/components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/freemind/model/ObjectFactory.java new file mode 100644 index 0000000..99f53c0 --- /dev/null +++ b/components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/freemind/model/ObjectFactory.java @@ -0,0 +1,159 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.2.8-b130911.1802 生成的 +// 请访问 http://java.sun.com/xml/jaxb +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 2022.09.23 时间 08:46:06 PM CST +// + + +package io.fluentqa.mindmap.freemind.model; + +import jakarta.xml.bind.annotation.XmlRegistry; + + +/** + * This object contains factory methods for each + * Java content interface and Java element interface + * generated in the io.fluent.qabox.mindmapping.freemind.model package. + *

An ObjectFactory allows you to programatically + * construct new instances of the Java representation + * for XML content. The Java representation of XML + * content can consist of schema derived interfaces + * and classes representing the binding of schema + * type definitions, element declarations and model + * groups. Factory methods for each of these are + * provided in this class. + * + */ +@XmlRegistry +public class ObjectFactory { + + + /** + * Create a new ObjectFactory that can be used to create new instances of schema derived classes for package: io.fluent.qabox.mindmapping.freemind.model + * + */ + public ObjectFactory() { + } + + /** + * Create an instance of {@link Arrowlink } + * + */ + public Arrowlink createArrowlink() { + return new Arrowlink(); + } + + /** + * Create an instance of {@link Richcontent } + * + */ + public Richcontent createRichcontent() { + return new Richcontent(); + } + + /** + * Create an instance of {@link Html } + * + */ + public Html createHtml() { + return new Html(); + } + + /** + * Create an instance of {@link Parameters } + * + */ + public Parameters createParameters() { + return new Parameters(); + } + + /** + * Create an instance of {@link Icon } + * + */ + public Icon createIcon() { + return new Icon(); + } + + /** + * Create an instance of {@link AttributeLayout } + * + */ + public AttributeLayout createAttributeLayout() { + return new AttributeLayout(); + } + + /** + * Create an instance of {@link Linktarget } + * + */ + public Linktarget createLinktarget() { + return new Linktarget(); + } + + /** + * Create an instance of {@link Cloud } + * + */ + public Cloud createCloud() { + return new Cloud(); + } + + /** + * Create an instance of {@link Node } + * + */ + public Node createNode() { + return new Node(); + } + + /** + * Create an instance of {@link Attribute } + * + */ + public Attribute createAttribute() { + return new Attribute(); + } + + /** + * Create an instance of {@link Edge } + * + */ + public Edge createEdge() { + return new Edge(); + } + + /** + * Create an instance of {@link Font } + * + */ + public Font createFont() { + return new Font(); + } + + /** + * Create an instance of {@link Hook } + * + */ + public Hook createHook() { + return new Hook(); + } + + /** + * Create an instance of {@link Text } + * + */ + public Text createText() { + return new Text(); + } + + /** + * Create an instance of {@link Map } + * + */ + public Map createMap() { + return new Map(); + } + +} diff --git a/components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/freemind/model/Parameters.java b/components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/freemind/model/Parameters.java new file mode 100644 index 0000000..7b86d5a --- /dev/null +++ b/components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/freemind/model/Parameters.java @@ -0,0 +1,362 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.2.8-b130911.1802 生成的 +// 请访问 http://java.sun.com/xml/jaxb +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 2022.09.23 时间 08:46:06 PM CST +// + + +package io.fluentqa.mindmap.freemind.model; + +import jakarta.xml.bind.annotation.*; + +import java.math.BigInteger; + + +/** + *

anonymous complex type的 Java 类。 + * + *

以下模式片段指定包含在此类中的预期内容。 + * + *

+ * <complexType>
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <attribute name="REMINDUSERAT" type="{http://www.w3.org/2001/XMLSchema}integer" />
+ *       <attribute name="ORIGINAL_ID" type="{http://www.w3.org/2001/XMLSchema}string" />
+ *       <attribute name="XML_STORAGE_MAP_LAT" type="{http://www.w3.org/2001/XMLSchema}string" />
+ *       <attribute name="XML_STORAGE_MAP_LON" type="{http://www.w3.org/2001/XMLSchema}string" />
+ *       <attribute name="XML_STORAGE_MAP_TOOLTIP_LOCATION" type="{http://www.w3.org/2001/XMLSchema}string" />
+ *       <attribute name="XML_STORAGE_POS_LAT" type="{http://www.w3.org/2001/XMLSchema}string" />
+ *       <attribute name="XML_STORAGE_POS_LON" type="{http://www.w3.org/2001/XMLSchema}string" />
+ *       <attribute name="XML_STORAGE_TILE_SOURCE" type="{http://www.w3.org/2001/XMLSchema}string" />
+ *       <attribute name="XML_STORAGE_ZOOM" type="{http://www.w3.org/2001/XMLSchema}string" />
+ *       <attribute name="CLONE_ID" type="{http://www.w3.org/2001/XMLSchema}string" />
+ *       <attribute name="CLONE_IDS" type="{http://www.w3.org/2001/XMLSchema}string" />
+ *       <attribute name="CLONE_ITSELF" type="{http://www.w3.org/2001/XMLSchema}string" />
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "") +@XmlRootElement(name = "Parameters") +public class Parameters { + + @XmlAttribute(name = "REMINDUSERAT") + protected BigInteger reminduserat; + @XmlAttribute(name = "ORIGINAL_ID") + protected String originalid; + @XmlAttribute(name = "XML_STORAGE_MAP_LAT") + protected String xmlstoragemaplat; + @XmlAttribute(name = "XML_STORAGE_MAP_LON") + protected String xmlstoragemaplon; + @XmlAttribute(name = "XML_STORAGE_MAP_TOOLTIP_LOCATION") + protected String xmlstoragemaptooltiplocation; + @XmlAttribute(name = "XML_STORAGE_POS_LAT") + protected String xmlstorageposlat; + @XmlAttribute(name = "XML_STORAGE_POS_LON") + protected String xmlstorageposlon; + @XmlAttribute(name = "XML_STORAGE_TILE_SOURCE") + protected String xmlstoragetilesource; + @XmlAttribute(name = "XML_STORAGE_ZOOM") + protected String xmlstoragezoom; + @XmlAttribute(name = "CLONE_ID") + protected String cloneid; + @XmlAttribute(name = "CLONE_IDS") + protected String cloneids; + @XmlAttribute(name = "CLONE_ITSELF") + protected String cloneitself; + + /** + * 获取reminduserat属性的值。 + * + * @return + * possible object is + * {@link BigInteger } + * + */ + public BigInteger getREMINDUSERAT() { + return reminduserat; + } + + /** + * 设置reminduserat属性的值。 + * + * @param value + * allowed object is + * {@link BigInteger } + * + */ + public void setREMINDUSERAT(BigInteger value) { + this.reminduserat = value; + } + + /** + * 获取originalid属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getORIGINALID() { + return originalid; + } + + /** + * 设置originalid属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setORIGINALID(String value) { + this.originalid = value; + } + + /** + * 获取xmlstoragemaplat属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getXMLSTORAGEMAPLAT() { + return xmlstoragemaplat; + } + + /** + * 设置xmlstoragemaplat属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setXMLSTORAGEMAPLAT(String value) { + this.xmlstoragemaplat = value; + } + + /** + * 获取xmlstoragemaplon属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getXMLSTORAGEMAPLON() { + return xmlstoragemaplon; + } + + /** + * 设置xmlstoragemaplon属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setXMLSTORAGEMAPLON(String value) { + this.xmlstoragemaplon = value; + } + + /** + * 获取xmlstoragemaptooltiplocation属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getXMLSTORAGEMAPTOOLTIPLOCATION() { + return xmlstoragemaptooltiplocation; + } + + /** + * 设置xmlstoragemaptooltiplocation属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setXMLSTORAGEMAPTOOLTIPLOCATION(String value) { + this.xmlstoragemaptooltiplocation = value; + } + + /** + * 获取xmlstorageposlat属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getXMLSTORAGEPOSLAT() { + return xmlstorageposlat; + } + + /** + * 设置xmlstorageposlat属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setXMLSTORAGEPOSLAT(String value) { + this.xmlstorageposlat = value; + } + + /** + * 获取xmlstorageposlon属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getXMLSTORAGEPOSLON() { + return xmlstorageposlon; + } + + /** + * 设置xmlstorageposlon属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setXMLSTORAGEPOSLON(String value) { + this.xmlstorageposlon = value; + } + + /** + * 获取xmlstoragetilesource属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getXMLSTORAGETILESOURCE() { + return xmlstoragetilesource; + } + + /** + * 设置xmlstoragetilesource属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setXMLSTORAGETILESOURCE(String value) { + this.xmlstoragetilesource = value; + } + + /** + * 获取xmlstoragezoom属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getXMLSTORAGEZOOM() { + return xmlstoragezoom; + } + + /** + * 设置xmlstoragezoom属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setXMLSTORAGEZOOM(String value) { + this.xmlstoragezoom = value; + } + + /** + * 获取cloneid属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getCLONEID() { + return cloneid; + } + + /** + * 设置cloneid属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setCLONEID(String value) { + this.cloneid = value; + } + + /** + * 获取cloneids属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getCLONEIDS() { + return cloneids; + } + + /** + * 设置cloneids属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setCLONEIDS(String value) { + this.cloneids = value; + } + + /** + * 获取cloneitself属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getCLONEITSELF() { + return cloneitself; + } + + /** + * 设置cloneitself属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setCLONEITSELF(String value) { + this.cloneitself = value; + } + +} diff --git a/components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/freemind/model/Richcontent.java b/components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/freemind/model/Richcontent.java new file mode 100644 index 0000000..1ebb491 --- /dev/null +++ b/components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/freemind/model/Richcontent.java @@ -0,0 +1,101 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.2.8-b130911.1802 生成的 +// 请访问 http://java.sun.com/xml/jaxb +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 2022.09.23 时间 08:46:06 PM CST +// + + +package io.fluentqa.mindmap.freemind.model; + +import jakarta.xml.bind.annotation.*; + + +/** + *

anonymous complex type的 Java 类。 + * + *

以下模式片段指定包含在此类中的预期内容。 + * + *

+ * <complexType>
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <sequence>
+ *         <element ref="{}html"/>
+ *       </sequence>
+ *       <attribute name="TYPE" use="required">
+ *         <simpleType>
+ *           <restriction base="{http://www.w3.org/2001/XMLSchema}string">
+ *             <enumeration value="NODE"/>
+ *             <enumeration value="NOTE"/>
+ *           </restriction>
+ *         </simpleType>
+ *       </attribute>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "", propOrder = { + "html" +}) +@XmlRootElement(name = "richcontent") +public class Richcontent { + + @XmlElement(required = true) + protected Html html; + @XmlAttribute(name = "TYPE", required = true) + protected String type; + + /** + * 获取html属性的值。 + * + * @return + * possible object is + * {@link Html } + * + */ + public Html getHtml() { + return html; + } + + /** + * 设置html属性的值。 + * + * @param value + * allowed object is + * {@link Html } + * + */ + public void setHtml(Html value) { + this.html = value; + } + + /** + * 获取type属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getTYPE() { + return type; + } + + /** + * 设置type属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setTYPE(String value) { + this.type = value; + } + +} diff --git a/components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/freemind/model/Text.java b/components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/freemind/model/Text.java new file mode 100644 index 0000000..db5b102 --- /dev/null +++ b/components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/freemind/model/Text.java @@ -0,0 +1,40 @@ +// +// 此文件是由 JavaTM Architecture for XML Binding (JAXB) 引用实现 v2.2.8-b130911.1802 生成的 +// 请访问 http://java.sun.com/xml/jaxb +// 在重新编译源模式时, 对此文件的所有修改都将丢失。 +// 生成时间: 2022.09.23 时间 08:46:06 PM CST +// + + +package io.fluentqa.mindmap.freemind.model; + +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlType; + + + +/** + *

anonymous complex type的 Java 类。 + * + *

以下模式片段指定包含在此类中的预期内容。 + * + *

+ * <complexType>
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "") +@XmlRootElement(name = "text") +public class Text { + + +} diff --git a/components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/package-info.java b/components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/package-info.java new file mode 100644 index 0000000..79e3b1f --- /dev/null +++ b/components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/package-info.java @@ -0,0 +1 @@ +package io.fluentqa.mindmap; \ No newline at end of file diff --git a/components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/xmind/XMindNode.java b/components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/xmind/XMindNode.java new file mode 100644 index 0000000..ec9b824 --- /dev/null +++ b/components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/xmind/XMindNode.java @@ -0,0 +1,12 @@ +package io.fluentqa.mindmap.xmind; + +import io.fluentqa.mindmap.api.MindMapPath; +import io.fluentqa.mindmap.xmind.model.Attached; + + + +public class XMindNode extends MindMapPath implements Cloneable { + public XMindNode(Attached root) { + super(root); + } +} diff --git a/components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/xmind/XMindUtil.java b/components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/xmind/XMindUtil.java new file mode 100644 index 0000000..f22fd11 --- /dev/null +++ b/components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/xmind/XMindUtil.java @@ -0,0 +1,62 @@ +package io.fluentqa.mindmap.xmind; + +import cn.hutool.core.compress.ZipReader; +import cn.hutool.core.io.FileUtil; +import cn.hutool.core.io.IoUtil; +import cn.hutool.core.util.ZipUtil; +import io.fluentqa.mindmap.exception.MindMapException; +import io.fluentqa.mindmap.xmind.model.XmindRawData; + +import java.io.IOException; +import java.io.InputStream; +import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; +import java.util.zip.ZipFile; + +public class XMindUtil { + private static String XML_FILE_NAME = "content.xml"; + private static String JSON_FILE_NAME = "content.json"; + + public static XmindRawData readXMindFile(String filePath) { + XmindRawData.XmindRawDataBuilder builder = XmindRawData.builder(); + try (ZipFile zipFile = ZipUtil.toZipFile(FileUtil.file(filePath), StandardCharsets.UTF_8)) { + ZipUtil.read(zipFile, zipEntry -> { + // 读取到content.xml,存储起来 + if (XML_FILE_NAME.equalsIgnoreCase(zipEntry.getName())) { + try (InputStream zipStream = ZipUtil.getStream(zipFile, zipEntry)) { + builder.contentXml(new String(IoUtil.readBytes(zipStream))); + } catch (IOException e) { + throw new MindMapException(e); + } + } + // 读取到content.json,存储起来,说明当前读取的xmind是zen格式 + if (JSON_FILE_NAME.equalsIgnoreCase(zipEntry.getName())) { + try (InputStream zipStream = ZipUtil.getStream(zipFile, zipEntry)) { + builder.contentJson(new String(IoUtil.readBytes(zipStream))); + } catch (IOException e) { + throw new MindMapException(e); + } + } + }); + } catch (Exception e) { + throw new MindMapException("解析失败!" + e.getLocalizedMessage()); + } + return builder.build(); + } + + public static XmindRawData readXmindFile(InputStream in) { + XmindRawData.XmindRawDataBuilder builder = XmindRawData.builder(); + ZipReader reader = new ZipReader(in, Charset.defaultCharset()); + reader.read(zipEntry -> { + // 读取到content.xml,存储起来 + if (XML_FILE_NAME.equalsIgnoreCase(zipEntry.getName())) { + builder.contentXml(new String(IoUtil.readBytes(in))); + } + // 读取到content.json,存储起来,说明当前读取的xmind是zen格式 + if (JSON_FILE_NAME.equalsIgnoreCase(zipEntry.getName())) { + builder.contentJson(new String(IoUtil.readBytes(in))); + } + }); + return builder.build(); + } +} diff --git a/components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/xmind/XmindTransformer.java b/components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/xmind/XmindTransformer.java new file mode 100644 index 0000000..b0108ae --- /dev/null +++ b/components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/xmind/XmindTransformer.java @@ -0,0 +1,89 @@ +package io.fluentqa.mindmap.xmind; + +import cn.hutool.json.JSONUtil; +import io.fluentqa.mindmap.api.MindMapConvertConfig; +import io.fluentqa.mindmap.api.MindMapPath; +import io.fluentqa.mindmap.api.MindMapPathRecord; +import io.fluentqa.mindmap.api.MindMapTransformer; +import io.fluentqa.mindmap.xmind.model.Attached; +import io.fluentqa.mindmap.xmind.model.JsonRootBean; +import io.fluentqa.mindmap.xmind.model.XmindRawData; + +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +/** + * 1. READ XMIND Files + * 2. Convert to List + */ +public class XmindTransformer implements MindMapTransformer { + + + @Override + public List> readMindMapToList(String mindMapPath) { + return convertToList(mindMapPath); + } + + @Override + public List readMindMapToList(String mindMapPath, Class clazz) { + List> paths = convertToList(mindMapPath); + List records = MindMapPathRecord.fromMindMapPaths(paths,Attached::getTitle); + return records.stream().map(mindMapPathRecord -> mindMapPathRecord.toBean(clazz)).collect(Collectors.toList()); + } + + @Override + public List readMindMapToList(String mindMapPath, Class clazz, MindMapConvertConfig config) { + List> paths = convertToList(mindMapPath); + List records = MindMapPathRecord.fromMindMapPaths(paths,Attached::getTitle); + return records.stream().map(mindMapPathRecord -> mindMapPathRecord.toBean(clazz,config)).collect(Collectors.toList()); + } + + private List> convertToList(String xmindFilePath) { + XmindRawData rawData = XMindUtil.readXMindFile(xmindFilePath); + List root = JSONUtil.toList(rawData.getContentJson(), JsonRootBean.class); + Attached rootNode = root.get(0).getRootTopic().getChildren().getAttached().get(0); + XMindNode xmindNode = new XMindNode(rootNode); + List> result = new ArrayList<>(); + populateNodes(List.of(xmindNode), result); + return result; + } + + /** + * ->Node1 + * currentNode | + * ->Node2 + * convert to: + * [ currentNode->Node1, + * currentNode->Node2] + * + * @param current: Current Node + * @return OUT: A List of MindMapPath + */ + private List> populateNextLevel(MindMapPath current) { + Attached lastNode = current.pathNodes().getLast(); + List> mindMapPaths = new ArrayList<>(); + for (Attached o : lastNode.getChildren().getAttached()) { + MindMapPath path = current.clone(); + if (o != null) { + path.pathNodes().add(o); + } + mindMapPaths.add(path); + } + + return mindMapPaths; + } + + + private void populateNodes(List> nodes, List> resultPaths) { + + for (MindMapPath current : nodes) { + if (current.pathNodes().getLast().getChildren() == null || + current.pathNodes().getLast().getChildren().getAttached() == null) { + resultPaths.add(current); + } else { + populateNodes(populateNextLevel(current), resultPaths); + } + } + } +} diff --git a/components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/xmind/model/Attached.java b/components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/xmind/model/Attached.java new file mode 100755 index 0000000..7fd9820 --- /dev/null +++ b/components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/xmind/model/Attached.java @@ -0,0 +1,18 @@ + +package io.fluentqa.mindmap.xmind.model; +import lombok.Data; + +import java.util.List; + + +@Data +public class Attached { + + private String id; + private String title; + private Notes notes; + private List comments; + private Children children; + + +} \ No newline at end of file diff --git a/components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/xmind/model/Children.java b/components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/xmind/model/Children.java new file mode 100755 index 0000000..db75693 --- /dev/null +++ b/components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/xmind/model/Children.java @@ -0,0 +1,12 @@ +package io.fluentqa.mindmap.xmind.model; +import lombok.Data; + +import java.util.List; + + +@Data +public class Children { + + private List attached; + +} \ No newline at end of file diff --git a/components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/xmind/model/Comments.java b/components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/xmind/model/Comments.java new file mode 100755 index 0000000..617959d --- /dev/null +++ b/components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/xmind/model/Comments.java @@ -0,0 +1,14 @@ + +package io.fluentqa.mindmap.xmind.model; + +import lombok.Data; + + +@Data +public class Comments { + + private long creationTime; + private String author; + private String content; + +} \ No newline at end of file diff --git a/components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/xmind/model/JsonRootBean.java b/components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/xmind/model/JsonRootBean.java new file mode 100755 index 0000000..5b8c059 --- /dev/null +++ b/components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/xmind/model/JsonRootBean.java @@ -0,0 +1,13 @@ + +package io.fluentqa.mindmap.xmind.model; +import lombok.Data; + + +@Data +public class JsonRootBean { + + private String id; + private String title; + private RootTopic rootTopic; + +} \ No newline at end of file diff --git a/components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/xmind/model/Notes.java b/components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/xmind/model/Notes.java new file mode 100755 index 0000000..c57939f --- /dev/null +++ b/components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/xmind/model/Notes.java @@ -0,0 +1,13 @@ + +package io.fluentqa.mindmap.xmind.model; + +import lombok.Data; + + +@Data +public class Notes { + + private String content; + + +} \ No newline at end of file diff --git a/components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/xmind/model/RootTopic.java b/components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/xmind/model/RootTopic.java new file mode 100755 index 0000000..160305d --- /dev/null +++ b/components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/xmind/model/RootTopic.java @@ -0,0 +1,19 @@ + +package io.fluentqa.mindmap.xmind.model; +import lombok.Data; + +import java.util.List; + + +@Data +public class RootTopic { + + private String id; + private String title; + private Notes notes; + private List comments; + private Children children; + + + +} \ No newline at end of file diff --git a/components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/xmind/model/XmindRawData.java b/components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/xmind/model/XmindRawData.java new file mode 100644 index 0000000..9fba02c --- /dev/null +++ b/components/fluent-ext/fluentqa-mindmap/src/main/java/io/fluentqa/mindmap/xmind/model/XmindRawData.java @@ -0,0 +1,39 @@ +package io.fluentqa.mindmap.xmind.model; + +import cn.hutool.core.util.StrUtil; +import cn.hutool.json.JSONArray; +import cn.hutool.json.JSONUtil; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.dataformat.xml.XmlMapper; +import lombok.Builder; +import lombok.Data; + + +import java.util.stream.Collectors; + +@Data +@Builder +public class XmindRawData { + private String contentJson; + private String contentXml; + + public boolean isZenVersion() { + return StrUtil.isNotBlank(this.contentJson); + } + + public String fetchContentJson() { + if (StrUtil.isNotBlank(this.contentJson)) { + return contentJson; + } + + if (StrUtil.isNotBlank(this.contentXml)) { + try { + return JSONUtil.toJsonPrettyStr(new XmlMapper().readValue(this.contentXml, JSONArray.class).stream().skip(1).collect(Collectors.toList())); + } catch (JsonProcessingException e) { + throw new RuntimeException(e); + } + } + + return StrUtil.EMPTY; + } +} diff --git a/components/fluent-ext/fluentqa-mindmap/src/main/resources/t2.mm b/components/fluent-ext/fluentqa-mindmap/src/main/resources/t2.mm new file mode 100644 index 0000000..d53b931 --- /dev/null +++ b/components/fluent-ext/fluentqa-mindmap/src/main/resources/t2.mm @@ -0,0 +1,112 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/components/fluent-ext/fluentqa-mindmap/src/test/java/io/fluentqa/mindmap/api/DemoBean.java b/components/fluent-ext/fluentqa-mindmap/src/test/java/io/fluentqa/mindmap/api/DemoBean.java new file mode 100644 index 0000000..d1a9e94 --- /dev/null +++ b/components/fluent-ext/fluentqa-mindmap/src/test/java/io/fluentqa/mindmap/api/DemoBean.java @@ -0,0 +1,21 @@ +package io.fluentqa.mindmap.api; + +import lombok.Data; + +@Data +public class DemoBean { + @NodeLevel(1) + private String moduleName; + @NodeLevel(2) + + private String featureName; + @NodeLevel(3) + + private String testCase; + @NodeLevel(4) + + private String testSteps; + @NodeLevel(5) + + private String expectedResult; +} diff --git a/components/fluent-ext/fluentqa-mindmap/src/test/java/io/fluentqa/mindmap/api/DemoBeanConfig.java b/components/fluent-ext/fluentqa-mindmap/src/test/java/io/fluentqa/mindmap/api/DemoBeanConfig.java new file mode 100644 index 0000000..e19e4e1 --- /dev/null +++ b/components/fluent-ext/fluentqa-mindmap/src/test/java/io/fluentqa/mindmap/api/DemoBeanConfig.java @@ -0,0 +1,14 @@ +package io.fluentqa.mindmap.api; + +public class DemoBeanConfig { + + public static MindMapConvertConfig loadConfig(){ + MindMapConvertConfig configs = new MindMapConvertConfig(); + configs.add(new MindMapConvertConfig.LevelConfig("moduleName",1)) + .add(new MindMapConvertConfig.LevelConfig("featureName",2)) + .add(new MindMapConvertConfig.LevelConfig("testCase",3)) + .add(new MindMapConvertConfig.LevelConfig("testSteps",4)) + .add(new MindMapConvertConfig.LevelConfig("expectedResult",5)); + return configs; + } +} diff --git a/components/fluent-ext/fluentqa-mindmap/src/test/java/io/fluentqa/mindmap/api/DemoBeanWOLevel.java b/components/fluent-ext/fluentqa-mindmap/src/test/java/io/fluentqa/mindmap/api/DemoBeanWOLevel.java new file mode 100644 index 0000000..0fc4799 --- /dev/null +++ b/components/fluent-ext/fluentqa-mindmap/src/test/java/io/fluentqa/mindmap/api/DemoBeanWOLevel.java @@ -0,0 +1,16 @@ +package io.fluentqa.mindmap.api; + +import lombok.Data; + +@Data +public class DemoBeanWOLevel { + private String moduleName; + + private String featureName; + + private String testCase; + + private String testSteps; + + private String expectedResult; +} diff --git a/components/fluent-ext/fluentqa-mindmap/src/test/java/io/fluentqa/mindmap/api/MindMapAccessorTest.java b/components/fluent-ext/fluentqa-mindmap/src/test/java/io/fluentqa/mindmap/api/MindMapAccessorTest.java new file mode 100644 index 0000000..5886f56 --- /dev/null +++ b/components/fluent-ext/fluentqa-mindmap/src/test/java/io/fluentqa/mindmap/api/MindMapAccessorTest.java @@ -0,0 +1,21 @@ +package io.fluentqa.mindmap.api; +import org.junit.jupiter.api.Test; + +import java.util.List; + +public class MindMapAccessorTest { + MindMapAccessor accessor = new MindMapAccessor(); + @Test + public void testMindMapAccessorTest(){ + String xmindFile = "./Xmind10+.xmind"; + List freeMindBeans = accessor.readMindMapToBean(xmindFile,DemoBean.class); + System.out.println(freeMindBeans); + } + + @Test + public void testFreeMindBeanConfigAccessorTest(){ + String freeMindfile = "./元件管理用例.mm"; + List freeMindBeans = accessor.readMindMapToBean(freeMindfile,DemoBeanWOLevel.class,DemoBeanConfig.loadConfig()); + System.out.println(freeMindBeans); + } +} diff --git a/components/fluent-ext/fluentqa-mindmap/src/test/java/io/fluentqa/mindmap/freemind/FreeMindConverterTest.java b/components/fluent-ext/fluentqa-mindmap/src/test/java/io/fluentqa/mindmap/freemind/FreeMindConverterTest.java new file mode 100644 index 0000000..8dd5a52 --- /dev/null +++ b/components/fluent-ext/fluentqa-mindmap/src/test/java/io/fluentqa/mindmap/freemind/FreeMindConverterTest.java @@ -0,0 +1,22 @@ +package io.fluentqa.mindmap.freemind; + +import io.fluentqa.mindmap.api.MindMapPath; +import io.fluentqa.mindmap.freemind.model.Node; +import org.junit.jupiter.api.BeforeEach; + +import java.util.List; + + +public class FreeMindConverterTest { + @BeforeEach + public void setup(){ + + } + @org.junit.jupiter.api.Test + void testToList() { + FreeMindTransformer converter = new FreeMindTransformer(); + List> result = converter.readMindMapToList("./t2.mm"); + System.out.println(result); + } + +} \ No newline at end of file diff --git a/components/fluent-ext/fluentqa-mindmap/src/test/java/io/fluentqa/mindmap/xmind/XMindUtilTest.java b/components/fluent-ext/fluentqa-mindmap/src/test/java/io/fluentqa/mindmap/xmind/XMindUtilTest.java new file mode 100644 index 0000000..19c98b4 --- /dev/null +++ b/components/fluent-ext/fluentqa-mindmap/src/test/java/io/fluentqa/mindmap/xmind/XMindUtilTest.java @@ -0,0 +1,26 @@ +package io.fluentqa.mindmap.xmind; + +import io.fluentqa.mindmap.xmind.model.XmindRawData; +import org.junit.jupiter.api.Test; + +class XMindUtilTest { + + @Test + void readXMindFile_ZEN() { + XmindRawData data = XMindUtil.readXMindFile("./XmindZen.xmind"); + System.out.println(data); + } + + @Test + void readXMindFile_XMIND() { + XmindRawData data = XMindUtil.readXMindFile("./Xmind10+.xmind"); + System.out.println(data); + } + + @Test + void readXMindFile_XMIND8() { + XmindRawData data = XMindUtil.readXMindFile("./Xmind8.xmind"); + System.out.println(data); + } + +} \ No newline at end of file diff --git a/components/fluent-ext/fluentqa-mindmap/src/test/java/io/fluentqa/mindmap/xmind/XmindTransformerTest.java b/components/fluent-ext/fluentqa-mindmap/src/test/java/io/fluentqa/mindmap/xmind/XmindTransformerTest.java new file mode 100644 index 0000000..7be0e73 --- /dev/null +++ b/components/fluent-ext/fluentqa-mindmap/src/test/java/io/fluentqa/mindmap/xmind/XmindTransformerTest.java @@ -0,0 +1,21 @@ +package io.fluentqa.mindmap.xmind; + +import io.fluentqa.mindmap.api.MindMapPath; +import io.fluentqa.mindmap.xmind.model.Attached; +import org.junit.jupiter.api.Test; + +import java.util.List; + +class XmindTransformerTest { + XmindTransformer xmindTransformer = new XmindTransformer(); + + @Test + void convertFromFileContent() { + } + + @Test + void convertFromFilePath() { + List> result = xmindTransformer.readMindMapToList("./Xmind10+.xmind"); + System.out.println(result); + } +} \ No newline at end of file diff --git a/components/fluent-ext/fluentqa-mindmap/src/test/resources/Xmind10+.xmind b/components/fluent-ext/fluentqa-mindmap/src/test/resources/Xmind10+.xmind new file mode 100644 index 0000000000000000000000000000000000000000..ce67a3f14cf2c34dae81a98378b07432b3e10dd1 GIT binary patch literal 68827 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 literal 0 HcmV?d00001 diff --git a/components/fluent-ext/fluentqa-mindmap/src/test/resources/case-template.xmind b/components/fluent-ext/fluentqa-mindmap/src/test/resources/case-template.xmind new file mode 100644 index 0000000000000000000000000000000000000000..0baca9c42afa5e589758553a71f49a70e177da74 GIT binary patch literal 320826 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


2Roc{YH{UH&xThL^*%lQ%&l$l*o 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

Uv% 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 vdUvPmnRjEGaM{^hUXKff>P)ysto>ec&yFOYkZ literal 0 HcmV?d00001 diff --git a/components/fluent-ext/fluentqa-mindmap/src/test/resources/t2.mm b/components/fluent-ext/fluentqa-mindmap/src/test/resources/t2.mm new file mode 100644 index 0000000..d53b931 --- /dev/null +++ b/components/fluent-ext/fluentqa-mindmap/src/test/resources/t2.mm @@ -0,0 +1,112 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git "a/components/fluent-ext/fluentqa-mindmap/src/test/resources/\345\205\203\344\273\266\347\256\241\347\220\206\347\224\250\344\276\213.mm" "b/components/fluent-ext/fluentqa-mindmap/src/test/resources/\345\205\203\344\273\266\347\256\241\347\220\206\347\224\250\344\276\213.mm" new file mode 100644 index 0000000..589851e --- /dev/null +++ "b/components/fluent-ext/fluentqa-mindmap/src/test/resources/\345\205\203\344\273\266\347\256\241\347\220\206\347\224\250\344\276\213.mm" @@ -0,0 +1,348 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git "a/components/fluent-ext/fluentqa-mindmap/src/test/resources/\351\200\232\347\224\250\347\273\204\344\273\266\347\224\250\344\276\213.mm" "b/components/fluent-ext/fluentqa-mindmap/src/test/resources/\351\200\232\347\224\250\347\273\204\344\273\266\347\224\250\344\276\213.mm" new file mode 100644 index 0000000..13e31d6 --- /dev/null +++ "b/components/fluent-ext/fluentqa-mindmap/src/test/resources/\351\200\232\347\224\250\347\273\204\344\273\266\347\224\250\344\276\213.mm" @@ -0,0 +1,268 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/components/fluent-ext/fluentqa-table/README.md b/components/fluent-ext/fluentqa-table/README.md new file mode 100644 index 0000000..3f1cdf3 --- /dev/null +++ b/components/fluent-ext/fluentqa-table/README.md @@ -0,0 +1,38 @@ + +``` +- 导出 + 1.正规excel导出 (格式简单,数据量可以,5W以内吧) + 注解方式: ExcelExportUtil.exportExcel(ExportParams entity, Class pojoClass,Collection dataSet) + 2.不定多少列,但是格式依然简单数据库不大 + 自定义方式: ExcelExportUtil.exportExcel(ExportParams entity, List entityList,Collection dataSet) + 3.数据量大超过5W,还在100W以内 + 注解方式 ExcelExportUtil.exportBigExcel(ExportParams entity, Class pojoClass,IExcelExportServer server, Object queryParams) + 自定义方式: ExcelExportUtil.exportBigExcel(ExportParams entity, List excelParams,IExcelExportServer server, Object queryParams) + 4.样式复杂,数据量尽量别大 + 模板导出 ExcelExportUtil.exportExcel(TemplateExportParams params, Map map) + 5.一次导出多个风格不一致的sheet + 模板导出 ExcelExportUtil.exportExcel(Map> map,TemplateExportParams params) + 6.一个模板但是要导出非常多份 + 模板导出 ExcelExportUtil.exportExcelClone(Map>> map,TemplateExportParams params) + 7.模板无法满足你的自定义,试试html + 自己构造html,然后我给你转成excel ExcelXorHtmlUtil.htmlToExcel(String html, ExcelType type) + 8.数据量过百万级了.放弃excel吧,csv导出 + 注解方式: CsvExportUtil.exportCsv(CsvExportParams params, Class pojoClass, OutputStream outputStream) + 自定义方式: CsvExportUtil.exportCsv(CsvExportParams params, List entityList, OutputStream outputStream) + 9.word导出 + 模板导出: WordExportUtil.exportWord07(String url, Map map) + 10.PDF导出 + 模板导出: TODO +- 导入 + 如果想提高性能 ImportParams 的concurrentTask 可以帮助并发导入,仅单行,最小1000 + excel有单个的那种特殊读取,readSingleCell 参数可以支持 + 1. 不需要检验,数据量不大(5W以内) + 注解或者MAP: ExcelImportUtil.importExcel(File file, Class pojoClass, ImportParams params) + 2. 需要导入,数据量不大 + 注解或者MAP: ExcelImportUtil.importExcelMore(InputStream inputstream, Class pojoClass, ImportParams params) + 3. 数据量大了,或者你有特别多的导入操作,内存比较少,仅支持单行 + SAX方式 ExcelImportUtil.importExcelBySax(InputStream inputstream, Class pojoClass, ImportParams params, IReadHandler handler) + 4. 数据量超过EXCEL限制,CSV读取 + 小数据量: CsvImportUtil.importCsv(InputStream inputstream, Class pojoClass,CsvImportParams params) + 大数据量: CsvImportUtil.importCsv(InputStream inputstream, Class pojoClass,CsvImportParams params, IReadHandler readHandler) +``` \ No newline at end of file diff --git a/components/fluent-ext/fluentqa-table/pom.xml b/components/fluent-ext/fluentqa-table/pom.xml new file mode 100644 index 0000000..075e9eb --- /dev/null +++ b/components/fluent-ext/fluentqa-table/pom.xml @@ -0,0 +1,130 @@ + + + 4.0.0 + + io.fluentqa + fluent-ext + 1.0-SNAPSHOT + + + fluentqa-table + + + + + + org.apache.poi + poi + 5.2.3 + + + org.apache.poi + poi-ooxml + 5.2.3 + + + com.github.crab2died + Excel4J + 3.1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + org.apache.poi + poi + 5.2.3 + + + org.apache.poi + poi-ooxml + 5.2.3 + + + \ No newline at end of file diff --git a/components/fluent-ext/fluentqa-table/src/main/java/io/fluentqa/table/ExcelReadWriter.java b/components/fluent-ext/fluentqa-table/src/main/java/io/fluentqa/table/ExcelReadWriter.java new file mode 100644 index 0000000..2e8cf0f --- /dev/null +++ b/components/fluent-ext/fluentqa-table/src/main/java/io/fluentqa/table/ExcelReadWriter.java @@ -0,0 +1,26 @@ +package io.fluentqa.table; + +import com.github.crab2died.ExcelUtils; +import com.github.crab2died.exceptions.Excel4JException; + +import java.io.IOException; +import java.util.List; + +public class ExcelReadWriter { + + public List readExcel(String fileName, Class clazz) { + try { + return ExcelUtils.getInstance().readExcel2Objects(fileName, clazz); + } catch (Excel4JException | IOException e) { + throw new RuntimeException(e); + } + } + + public void writeExcel(List data, String fileName, Class clazz) { + try { + ExcelUtils.getInstance().exportObjects2Excel(data, clazz, true, fileName); + } catch (Excel4JException | IOException e) { + throw new RuntimeException(e); + } + } +} diff --git a/components/fluent-ext/fluentqa-table/src/main/java/io/fluentqa/table/package-info.java b/components/fluent-ext/fluentqa-table/src/main/java/io/fluentqa/table/package-info.java new file mode 100644 index 0000000..97f1595 --- /dev/null +++ b/components/fluent-ext/fluentqa-table/src/main/java/io/fluentqa/table/package-info.java @@ -0,0 +1 @@ +package io.fluentqa.table; \ No newline at end of file diff --git a/components/fluent-ext/fluentqa-table/src/test/java/io/fluentqa/table/excel/DemoExcelModel.java b/components/fluent-ext/fluentqa-table/src/test/java/io/fluentqa/table/excel/DemoExcelModel.java new file mode 100644 index 0000000..5e2ff8b --- /dev/null +++ b/components/fluent-ext/fluentqa-table/src/test/java/io/fluentqa/table/excel/DemoExcelModel.java @@ -0,0 +1,17 @@ +package io.fluentqa.table.excel; + + +import io.fluentqa.table.excel.annotation.ExcelColumn; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class DemoExcelModel { + @ExcelColumn(index = 0,title = "名称") + private String name; + @ExcelColumn(index = 1,title = "年纪") + private Integer age; +} diff --git a/components/fluent-ext/fluentqa-table/src/test/java/io/fluentqa/table/excel/ExcelUtilsTest.java b/components/fluent-ext/fluentqa-table/src/test/java/io/fluentqa/table/excel/ExcelUtilsTest.java new file mode 100644 index 0000000..498c1f3 --- /dev/null +++ b/components/fluent-ext/fluentqa-table/src/test/java/io/fluentqa/table/excel/ExcelUtilsTest.java @@ -0,0 +1,44 @@ +package io.fluentqa.table.excel; + + +import io.fluentqa.table.FluentExcelReader; +import io.fluentqa.table.FluentExcelWriter; +import io.fluentqa.table.base.TableType; +import org.apache.commons.io.FileUtils; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.Order; +import org.junit.jupiter.api.Test; + +import java.io.File; +import java.io.IOException; +import java.util.Arrays; +import java.util.List; + +public class ExcelUtilsTest { + + List data = Arrays.asList(new DemoExcelModel("k", 12), + new DemoExcelModel("y", 10)); + + @Test + void testWriteToExcel() throws IOException { + File demo= new File("demo.xlsx"); + FluentExcelWriter.create(TableType.XLSX).withRows( + data + ).to(demo); + } + @Test + @Order(100) + void testReadExcel() { + List models =FluentExcelReader.create(DemoExcelModel.class, + new File("demo.xlsx")) + .asList(); + System.out.println(models); + + } + + @AfterAll + public static void cleanUp() throws IOException { + FileUtils.delete( new File("demo.xlsx")); + } + +} \ No newline at end of file diff --git a/components/fluent-ext/fluentqa-table/src/test/resources/test.xlsx b/components/fluent-ext/fluentqa-table/src/test/resources/test.xlsx new file mode 100644 index 0000000..d54c449 --- /dev/null +++ b/components/fluent-ext/fluentqa-table/src/test/resources/test.xlsx @@ -0,0 +1,3 @@ +name age +kk 12 +ky 14 diff --git a/components/fluent-ext/pom.xml b/components/fluent-ext/pom.xml new file mode 100644 index 0000000..40a6d6b --- /dev/null +++ b/components/fluent-ext/pom.xml @@ -0,0 +1,19 @@ + + + 4.0.0 + + io.fluentqa + components + 1.0-SNAPSHOT + + pom + fluent-ext + + fluentqa-mindmap + fluentqa-table + fluentqa-md + + + \ No newline at end of file diff --git a/components/pom.xml b/components/pom.xml index ba4ac3b..976a83d 100644 --- a/components/pom.xml +++ b/components/pom.xml @@ -16,5 +16,6 @@ fluent-builtin fluent-code fluent-basemodel + fluent-ext \ No newline at end of file diff --git a/fluent-erupts/fluent-erupts-base/src/main/java/io/fluentqa/erupts/base/model/NamedModelVO.java b/fluent-erupts/fluent-erupts-base/src/main/java/io/fluentqa/erupts/base/model/NamedModelVO.java index fdb6e58..b6a9182 100644 --- a/fluent-erupts/fluent-erupts-base/src/main/java/io/fluentqa/erupts/base/model/NamedModelVO.java +++ b/fluent-erupts/fluent-erupts-base/src/main/java/io/fluentqa/erupts/base/model/NamedModelVO.java @@ -41,4 +41,20 @@ public class NamedModelVO extends ModelWithValidFlagVo { ) ) private String description; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } } diff --git a/fluent-erupts/fluent-pm/src/main/java/io/fluentqa/pm/product/repo/ProductRepo.java b/fluent-erupts/fluent-pm/src/main/java/io/fluentqa/pm/product/repo/ProductRepo.java new file mode 100644 index 0000000..ab0f65d --- /dev/null +++ b/fluent-erupts/fluent-pm/src/main/java/io/fluentqa/pm/product/repo/ProductRepo.java @@ -0,0 +1,18 @@ +package io.fluentqa.pm.product.repo; + + +import io.fluentqa.pm.product.model.Product; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.JpaSpecificationExecutor; +import org.springframework.stereotype.Repository; + +import java.util.Optional; + +@Repository +public interface ProductRepo extends JpaRepository, JpaSpecificationExecutor { + + Optional findProductByNameAndValid(String name, boolean valid); + + Optional findProductByCodeAndValid(String codeName, boolean valid); + Optional findProductByParentIdAndNameAndValid(Long parentId, String name, boolean valid); +} diff --git a/fluent-erupts/fluent-pm/src/main/java/io/fluentqa/pm/product/service/ProductService.java b/fluent-erupts/fluent-pm/src/main/java/io/fluentqa/pm/product/service/ProductService.java new file mode 100644 index 0000000..52b8920 --- /dev/null +++ b/fluent-erupts/fluent-pm/src/main/java/io/fluentqa/pm/product/service/ProductService.java @@ -0,0 +1,38 @@ +package io.fluentqa.pm.product.service; + +import io.fluentqa.pm.product.model.Product; +import io.fluentqa.pm.product.repo.ProductRepo; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.Optional; + +@Service +public class ProductService { + private final String API_SERVICE="API"; + @Resource + private ProductRepo metaRepo; + public Product createModuleIfNotExist(Long productId, String moduleName){ + Optional meta = metaRepo.findProductByParentIdAndNameAndValid(productId, + moduleName,true); + if(meta.isPresent()) return meta.get(); + Product parent = new Product(); + parent.setId(productId); + Product module = new Product(); + module.setName(moduleName); + module.setDetails(moduleName); + module.setParent(parent); + return metaRepo.save(module); + } + + public Product findApiServiceProduct(){ + Optional meta = metaRepo.findProductByCodeAndValid(API_SERVICE,true); + if(meta.isPresent()) return meta.get(); + throw new RuntimeException("Please config API Service as a Product in Product Meta"); + } + + public Product createApiModuleIfNotExist(String moduleName){ + Product parent = findApiServiceProduct(); + return createModuleIfNotExist(parent.getId(),moduleName); + } +} diff --git a/fluent-erupts/fluent-pm/src/main/java/io/fluentqa/pm/project/model/Project.java b/fluent-erupts/fluent-pm/src/main/java/io/fluentqa/pm/project/model/Project.java index 2dbb84e..5af9f24 100644 --- a/fluent-erupts/fluent-pm/src/main/java/io/fluentqa/pm/project/model/Project.java +++ b/fluent-erupts/fluent-pm/src/main/java/io/fluentqa/pm/project/model/Project.java @@ -11,11 +11,9 @@ import xyz.erupt.annotation.sub_field.Edit; import xyz.erupt.annotation.sub_field.EditType; import xyz.erupt.annotation.sub_field.View; -import xyz.erupt.annotation.sub_field.sub_edit.ChoiceType; import xyz.erupt.annotation.sub_field.sub_edit.InputType; import xyz.erupt.annotation.sub_field.sub_edit.ReferenceTreeType; import xyz.erupt.annotation.sub_field.sub_edit.Search; -import xyz.erupt.toolkit.handler.SqlChoiceFetchHandler; import javax.persistence.*; import java.util.UUID; diff --git a/fluent-erupts/fluent-tc/pom.xml b/fluent-erupts/fluent-tc/pom.xml index 0148ca7..66da623 100644 --- a/fluent-erupts/fluent-tc/pom.xml +++ b/fluent-erupts/fluent-tc/pom.xml @@ -23,6 +23,20 @@ fluent-pm ${fluent.version} - + + io.fluentqa + fluent-builtin + ${fluent.version} + + + io.fluentqa + fluentqa-table + ${fluent.version} + + + io.fluentqa + fluentqa-mindmap + ${fluent.version} + \ No newline at end of file diff --git a/fluent-erupts/fluent-tc/src/main/java/io/fluentqa/tc/dto/TestCaseDTO.java b/fluent-erupts/fluent-tc/src/main/java/io/fluentqa/tc/dto/TestCaseDTO.java new file mode 100644 index 0000000..cb5c3f2 --- /dev/null +++ b/fluent-erupts/fluent-tc/src/main/java/io/fluentqa/tc/dto/TestCaseDTO.java @@ -0,0 +1,33 @@ +package io.fluentqa.tc.dto; + +import com.github.crab2died.annotation.ExcelField; +import io.fluentqa.mindmap.api.NodeLevel; +import lombok.Data; + +@Data +public class TestCaseDTO { + @ExcelField(title = "产品名称") + private String productName; + @ExcelField(title = "模块名称") + @NodeLevel(value = 1) + private String moduleName; + @ExcelField(title = "功能点") + @NodeLevel(value = 2) + private String feature; + @ExcelField(title = "用例描述") + @NodeLevel(value = 3) + private String summary; + @ExcelField(title = "优先级") + private String priority = "P2"; //check it + @ExcelField(title = "用例前提条件") + private String precondition; + @ExcelField(title = "测试步骤") + private String steps; + @ExcelField(title = "期望结果") + @NodeLevel(value = 5) + private String expectedResult; + + @ExcelField(title = "用例ID") + private String uuid; + +} diff --git a/fluent-erupts/fluent-tc/src/main/java/io/fluentqa/tc/handlers/GenerateTestRecordHandler.java b/fluent-erupts/fluent-tc/src/main/java/io/fluentqa/tc/handlers/GenerateTestRecordHandler.java new file mode 100644 index 0000000..c6e6625 --- /dev/null +++ b/fluent-erupts/fluent-tc/src/main/java/io/fluentqa/tc/handlers/GenerateTestRecordHandler.java @@ -0,0 +1,46 @@ +package io.fluentqa.tc.handlers; + + +import cn.hutool.core.bean.BeanUtil; +import io.fluentqa.tc.model.TestCase; +import io.fluentqa.tc.model.TestResult; +import io.fluentqa.tc.model.TestRun; +import io.fluentqa.tc.model.TestScenario; +import io.fluentqa.tc.repo.TestResultRepo; +import org.springframework.stereotype.Service; +import xyz.erupt.annotation.fun.OperationHandler; + +import javax.annotation.Resource; +import java.util.List; + +@Service +public class GenerateTestRecordHandler implements OperationHandler { + @Resource + private TestResultRepo testResultRepo; + @Override + public String exec(List data, Void unused, String[] param) { + for (TestRun testRun : data) { + //get all test cases + for (TestCase testCase : testRun.getTestCases()) { + TestResult result = BeanUtil.copyProperties(testCase, TestResult.class); + result.setTestCaseUUID(testCase.getUuid()); + result.setTestRun(testRun); + result.setQaOwner(testRun.getTestOwner()); + testResultRepo.save(result); + } + for (TestScenario tc : testRun.getTestScenarios()) { + for (TestCase testCase : tc.getTestCases()) { + TestResult result = BeanUtil.copyProperties(testCase, TestResult.class); + result.setTestCaseUUID(testCase.getUuid()); + result.setTestRun(testRun); + result.setQaOwner(testRun.getTestOwner()); + result.setTestScenario(tc.getName()); + testResultRepo.save(result); + } + } + } + return null; + } + + +} diff --git a/fluent-erupts/fluent-tc/src/main/java/io/fluentqa/tc/model/TestCase.java b/fluent-erupts/fluent-tc/src/main/java/io/fluentqa/tc/model/TestCase.java index c14fe1f..4ce7b26 100644 --- a/fluent-erupts/fluent-tc/src/main/java/io/fluentqa/tc/model/TestCase.java +++ b/fluent-erupts/fluent-tc/src/main/java/io/fluentqa/tc/model/TestCase.java @@ -1,10 +1,8 @@ package io.fluentqa.tc.model; + import io.fluentqa.erupts.base.handlers.SqlTagFetchHandler; -import io.fluentqa.erupts.base.model.ModelWithValidFlagVo; -import io.fluentqa.pm.product.model.Product; import io.fluentqa.pm.product.model.ProductModuleValidFlagVo; -import lombok.Data; import xyz.erupt.annotation.Erupt; import xyz.erupt.annotation.EruptField; import xyz.erupt.annotation.sub_erupt.LinkTree; @@ -13,39 +11,22 @@ import xyz.erupt.annotation.sub_field.EditType; import xyz.erupt.annotation.sub_field.View; import xyz.erupt.annotation.sub_field.sub_edit.CodeEditorType; -import xyz.erupt.annotation.sub_field.sub_edit.ReferenceTreeType; import xyz.erupt.annotation.sub_field.sub_edit.Search; import xyz.erupt.annotation.sub_field.sub_edit.TagsType; import javax.persistence.Entity; -import javax.persistence.JoinColumn; -import javax.persistence.ManyToOne; import javax.persistence.Table; /** * */ -@Data @Entity @Erupt(name = "测试用例", power = @Power(export = true), orderBy = "TestCase.updateTime desc", linkTree = @LinkTree(field = "product")) @Table(name = "test_cases") -public class TestCase extends ModelWithValidFlagVo { - @ManyToOne - @JoinColumn(name = "product_id") - @EruptField( - views = @View(title = "产品名称",column = "name"), - edit = @Edit( - search = @Search, - title = "产品选择", - type = EditType.REFERENCE_TREE, - desc = "动态获取产品", - referenceTreeType = @ReferenceTreeType( - pid = "parent.id")) - ) - private Product product; +public class TestCase extends ProductModuleValidFlagVo { @EruptField( views = @View( @@ -53,13 +34,8 @@ public class TestCase extends ModelWithValidFlagVo { ), edit = @Edit( title = "功能点", - type = EditType.TAGS, search = @Search(vague = true), notNull = true, - tagsType = @TagsType( - fetchHandler = SqlTagFetchHandler.class, - fetchHandlerParams = "select distinct feature from test_cases where valid=true" - ) + type = EditType.INPUT, search = @Search, notNull = true ) - ) private String feature; @EruptField( @@ -79,20 +55,16 @@ public class TestCase extends ModelWithValidFlagVo { ), edit = @Edit( title = "用例优先级", - type = EditType.INPUT, search = @Search, notNull = true - ) - ) - private String priority = "P2"; //check it - @EruptField( - views = @View( - title = "用例前提条件" - ), - edit = @Edit( - title = "用例前提条件", - type = EditType.INPUT, search = @Search, notNull = true + type = EditType.TAGS, + tagsType = @TagsType( + fetchHandler = SqlTagFetchHandler.class, + fetchHandlerParams = "select distinct priority from test_cases" + ) ) ) - private String precondition; + private String priority = "P2"; + + @EruptField( views = @View( title = "测试步骤" @@ -110,9 +82,83 @@ public class TestCase extends ModelWithValidFlagVo { ), edit = @Edit( title = "用例期望结果", - type = EditType.CODE_EDITOR, notNull = true, + type = EditType.CODE_EDITOR, codeEditType = @CodeEditorType(language = "text") ) ) private String expectedResult; -} + + @EruptField( + views = @View( + title = "用例ID" + ) + ) + private String uuid; + @EruptField( + views = @View( + title = "用例前提条件" + ), + edit = @Edit( + title = "用例前提条件", + type = EditType.CODE_EDITOR, + codeEditType = @CodeEditorType(language = "text") + ) + ) + private String precondition; + + public String getFeature() { + return feature; + } + + public void setFeature(String feature) { + this.feature = feature; + } + + public String getSummary() { + return summary; + } + + public void setSummary(String summary) { + this.summary = summary; + } + + public String getPriority() { + return priority; + } + + public void setPriority(String priority) { + this.priority = priority; + } + + public String getSteps() { + return steps; + } + + public void setSteps(String steps) { + this.steps = steps; + } + + public String getExpectedResult() { + return expectedResult; + } + + public void setExpectedResult(String expectedResult) { + this.expectedResult = expectedResult; + } + + public String getUuid() { + return uuid; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } + + public String getPrecondition() { + return precondition; + } + + public void setPrecondition(String precondition) { + this.precondition = precondition; + } +} \ No newline at end of file diff --git a/fluent-erupts/fluent-tc/src/main/java/io/fluentqa/tc/model/TestPlan.java b/fluent-erupts/fluent-tc/src/main/java/io/fluentqa/tc/model/TestPlan.java deleted file mode 100644 index 80bd85b..0000000 --- a/fluent-erupts/fluent-tc/src/main/java/io/fluentqa/tc/model/TestPlan.java +++ /dev/null @@ -1,72 +0,0 @@ -package io.fluentqa.tc.model; - - -import io.fluentqa.erupts.base.model.NamedTimeStatusModel; -import io.fluentqa.pm.product.model.Product; -import xyz.erupt.annotation.Erupt; -import xyz.erupt.annotation.EruptField; -import xyz.erupt.annotation.sub_erupt.LinkTree; -import xyz.erupt.annotation.sub_erupt.Power; -import xyz.erupt.annotation.sub_erupt.Tree; -import xyz.erupt.annotation.sub_field.Edit; -import xyz.erupt.annotation.sub_field.EditType; -import xyz.erupt.annotation.sub_field.View; -import xyz.erupt.annotation.sub_field.sub_edit.ReferenceTreeType; -import xyz.erupt.annotation.sub_field.sub_edit.Search; - -import javax.persistence.*; -import java.util.Set; - -/** - * 1. 创建测试计划 - * 2. 上传test case 文件,或者指定文件地址 - * 3. 生成测试用例-后台异步执行 - * 4. - * 2. - */ -@Entity -@Table(name = "test_plans") -@Erupt(name = "测试计划管理", - power = @Power(importable = true, export = true) - ,linkTree = @LinkTree(field = "testRequirement") -) -public class TestPlan extends NamedTimeStatusModel { - - @EruptField( - views = @View( - title = "负责人" - ), - edit = @Edit( - title = "负责人", - type = EditType.INPUT, search = @Search, notNull = true - ) - ) - private String owner; - - @ManyToOne - @JoinColumn(name = "tr_id") - @EruptField( - views = @View(title = "需求名称", column = "name"), - edit = @Edit( - search = @Search, - title = "需求选择", - type = EditType.REFERENCE_TREE, - desc = "动态需求", - referenceTreeType = @ReferenceTreeType( - pid = "parent.id")) - ) - private TestRequirement testRequirement; - - @JoinTable(name = "test_plan_cases", - joinColumns = @JoinColumn(name = "test_plan_id", referencedColumnName = "id"), - inverseJoinColumns = @JoinColumn(name = "test_case_id", referencedColumnName = "id")) - @ManyToMany(fetch = FetchType.EAGER) - @EruptField( - views = @View(title = "包含用例"), - edit = @Edit( - title = "包含用例", - type = EditType.TAB_TABLE_REFER - ) - ) - private Set testCases; -} diff --git a/fluent-erupts/fluent-tc/src/main/java/io/fluentqa/tc/model/TestRecord.java b/fluent-erupts/fluent-tc/src/main/java/io/fluentqa/tc/model/TestRecord.java deleted file mode 100644 index f837e3e..0000000 --- a/fluent-erupts/fluent-tc/src/main/java/io/fluentqa/tc/model/TestRecord.java +++ /dev/null @@ -1,186 +0,0 @@ -package io.fluentqa.tc.model; - - -import io.fluentqa.erupts.base.model.ModelWithValidFlagVo; -import lombok.Data; -import xyz.erupt.annotation.Erupt; -import xyz.erupt.annotation.EruptField; -import xyz.erupt.annotation.sub_erupt.LinkTree; -import xyz.erupt.annotation.sub_field.Edit; -import xyz.erupt.annotation.sub_field.EditType; -import xyz.erupt.annotation.sub_field.View; -import xyz.erupt.annotation.sub_field.sub_edit.ReferenceTableType; -import xyz.erupt.annotation.sub_field.sub_edit.ReferenceTreeType; -import xyz.erupt.annotation.sub_field.sub_edit.Search; - -import javax.persistence.*; -import java.util.Set; - -/** - * Test Record Entity: 主要操作对象 - * * Test Case Entity - * * upload to test case table from mindmap or xmind - * * in a given format - * * - * * 1. 编写测试用例 - * * 2. 编写测试计划,并上传测试用例 - * * 3. 设置测试需要负责开发 - * * 4. 测试用例修改 - * * 5. 测试用例添加 - * * 6. 脑图插件 - */ -@Data -@Table(name = "test_records") -@Entity -@Erupt(name="测试执行",linkTree = @LinkTree(field = "testRequirement") -) -public class TestRecord extends ModelWithValidFlagVo { - @ManyToOne - @JoinColumn(name = "tr_id") - @EruptField( - views = @View(title = "需求名称", column = "name"), - edit = @Edit( - search = @Search, - title = "需求选择", - type = EditType.REFERENCE_TREE, - desc = "需求选择", - referenceTreeType = @ReferenceTreeType( - pid = "parent.id")) - ) - private TestRequirement testRequirement; - - @ManyToOne - @JoinColumn(name = "test_plan_id") - @EruptField( - views = @View(title = "测试计划", column = "name"), - edit = @Edit( - search = @Search, - title = "测试计划选择", - type = EditType.REFERENCE_TABLE, - desc = "测试计划选择", - referenceTableType = @ReferenceTableType(id = "id", label = "name")) - ) - private TestPlan testPlan; -// - - - @JoinTable(name = "test_record_cases", - joinColumns = @JoinColumn(name = "test_record_id", referencedColumnName = "id"), - inverseJoinColumns = @JoinColumn(name = "test_case_id", referencedColumnName = "id")) - @ManyToMany(fetch = FetchType.EAGER) - @EruptField( - views = @View(title = "包含用例"), - edit = @Edit( - title = "包含用例", - type = EditType.TAB_TABLE_REFER - ) - ) - private Set testCases; - -// @EruptField( -// views = @View( -// title = "功能点" -// ), -// edit = @Edit( -// title = "功能点", -// type = EditType.INPUT, search = @Search, notNull = true -// ) -// ) -// private String feature; -// @EruptField( -// views = @View( -// title = "用例描述" -// ), -// edit = @Edit( -// title = "用例描述", -// type = EditType.INPUT, notNull = true -// ) -// ) -// private String summary; -// @EruptField( -// views = @View( -// title = "用例优先级" -// ), -// edit = @Edit( -// title = "用例优先级", -// type = EditType.INPUT, search = @Search, notNull = true -// ) -// ) -// private String priority = "P2"; //check it -// @EruptField( -// views = @View( -// title = "测试步骤" -// ), -// edit = @Edit( -// title = "测试步骤", -// type = EditType.CODE_EDITOR, notNull = true, -// codeEditType = @CodeEditorType(language = "text") -// ) -// ) -// private String steps; -// @EruptField( -// views = @View( -// title = "用例期望结果" -// ), -// edit = @Edit( -// title = "用例期望结果", -// type = EditType.CODE_EDITOR, notNull = true, -// codeEditType = @CodeEditorType(language = "text") -// ) -// ) -// private String expectedResult; - - @EruptField( - views = @View( - title = "开发自测结果" - ), - edit = @Edit( - title = "开发自测结果", - type = EditType.INPUT, search = @Search, notNull = true - ) - ) - private String devTestResult; - @EruptField( - views = @View( - title = "测试测试结果" - ), - edit = @Edit( - title = "测试测试结果", - type = EditType.INPUT, search = @Search, notNull = true - ) - ) - private String qaTestResult; - - @EruptField( - views = @View( - title = "回归测试结果" - ), - edit = @Edit( - title = "回归测试结果", - type = EditType.INPUT, search = @Search, notNull = true - ) - ) - private String releaseTestResult; - @EruptField( - views = @View( - title = "开发负责人" - ), - edit = @Edit( - title = "开发负责人", - type = EditType.INPUT, search = @Search, notNull = true - ) - ) - private String devOwner; - @EruptField( - views = @View( - title = "测试负责人" - ), - edit = @Edit( - title = "测试负责人", - type = EditType.INPUT, search = @Search, notNull = true - ) - ) - private String qaOwner; - - -} diff --git a/fluent-erupts/fluent-tc/src/main/java/io/fluentqa/tc/model/TestRequirement.java b/fluent-erupts/fluent-tc/src/main/java/io/fluentqa/tc/model/TestRequirement.java deleted file mode 100644 index 777b86a..0000000 --- a/fluent-erupts/fluent-tc/src/main/java/io/fluentqa/tc/model/TestRequirement.java +++ /dev/null @@ -1,76 +0,0 @@ -package io.fluentqa.tc.model; - -import io.fluentqa.erupts.base.model.NamedTimeStatusModel; -import io.fluentqa.pm.product.model.Product; -import lombok.Data; -import xyz.erupt.annotation.Erupt; -import xyz.erupt.annotation.EruptField; -import xyz.erupt.annotation.sub_erupt.Power; -import xyz.erupt.annotation.sub_erupt.Tree; -import xyz.erupt.annotation.sub_field.Edit; -import xyz.erupt.annotation.sub_field.EditType; -import xyz.erupt.annotation.sub_field.View; -import xyz.erupt.annotation.sub_field.sub_edit.ReferenceTreeType; -import xyz.erupt.annotation.sub_field.sub_edit.Search; - -import javax.persistence.Entity; -import javax.persistence.JoinColumn; -import javax.persistence.ManyToOne; -import javax.persistence.Table; - -//TODO: Filter By Status -//TODO: input by Uploaded File or File Sync -@Data -@Entity -@Table(name ="requirements") -@Erupt(name = "测试需求管理", - power = @Power(importable = true, export = true), - tree = @Tree(pid = "parent.id")) -public class TestRequirement extends NamedTimeStatusModel { - @ManyToOne - @EruptField( - edit = @Edit( - title = "上级需求", - type = EditType.REFERENCE_TREE, - referenceTreeType = @ReferenceTreeType(pid = "parent.id") - ) - ) - private TestRequirement parent; - - @ManyToOne - @JoinColumn(name = "product_id") - @EruptField( - views = @View(title = "产品名称",column = "name"), - edit = @Edit( - search = @Search, - title = "产品选择", - type = EditType.REFERENCE_TREE, - desc = "动态获取产品", - referenceTreeType = @ReferenceTreeType( - pid = "parent.id")) - ) - private Product product; - - @EruptField( - views = @View( - title = "测试负责人" - ), - edit = @Edit( - title = "测试负责人", - type = EditType.INPUT, search = @Search, notNull = true - ) - ) - private String testOwner; - - @EruptField( - views = @View( - title = "产品负责人" - ), - edit = @Edit( - title = "产品负责人", - type = EditType.INPUT, search = @Search, notNull = true - ) - ) - private String productOwner; - -} diff --git a/fluent-erupts/fluent-tc/src/main/java/io/fluentqa/tc/model/TestResult.java b/fluent-erupts/fluent-tc/src/main/java/io/fluentqa/tc/model/TestResult.java new file mode 100644 index 0000000..a37b87f --- /dev/null +++ b/fluent-erupts/fluent-tc/src/main/java/io/fluentqa/tc/model/TestResult.java @@ -0,0 +1,206 @@ +package io.fluentqa.tc.model; + + +import io.fluentqa.erupts.base.model.ModelWithValidFlagVo; +import xyz.erupt.annotation.Erupt; +import xyz.erupt.annotation.EruptField; +import xyz.erupt.annotation.sub_erupt.LinkTree; +import xyz.erupt.annotation.sub_erupt.Power; +import xyz.erupt.annotation.sub_field.Edit; +import xyz.erupt.annotation.sub_field.EditType; +import xyz.erupt.annotation.sub_field.View; +import xyz.erupt.annotation.sub_field.sub_edit.CodeEditorType; +import xyz.erupt.annotation.sub_field.sub_edit.ReferenceTreeType; +import xyz.erupt.annotation.sub_field.sub_edit.Search; + +import javax.persistence.Entity; +import javax.persistence.ManyToOne; +import javax.persistence.Table; + + +@Table(name = "test_results") +@Entity +@Erupt(name = "测试执行结果", + power = @Power(importable = true, export = true) + , linkTree = @LinkTree(field = "testRun") +) +public class TestResult extends ModelWithValidFlagVo { + @ManyToOne + @EruptField( + views = @View(title = "所属测试安排", column = "name"), + edit = @Edit(title = "所属测试安排", type = EditType.REFERENCE_TREE, + referenceTreeType = @ReferenceTreeType(pid = "parent.id", expandLevel = 2)) + ) + private TestRun testRun; + + @EruptField( + views = @View( + title = "测试场景" + ), + edit = @Edit( + title = "测试场景", + type = EditType.INPUT, search = @Search, notNull = true + ) + ) + private String testScenario; + @EruptField( + views = @View( + title = "功能点" + ), + edit = @Edit( + title = "功能点", + type = EditType.INPUT, search = @Search, notNull = true + ) + ) + private String feature; + @EruptField( + views = @View( + title = "用例描述" + ), + edit = @Edit( + title = "用例描述", + type = EditType.INPUT, notNull = true + ) + ) + private String summary; + @EruptField( + views = @View( + title = "用例优先级" + ), + edit = @Edit( + title = "用例优先级", + type = EditType.INPUT, search = @Search, notNull = true + ) + ) + private String priority = "P2"; //check it + @EruptField( + views = @View( + title = "测试步骤" + ), + edit = @Edit( + title = "测试步骤", + type = EditType.CODE_EDITOR, notNull = true, + codeEditType = @CodeEditorType(language = "text") + ) + ) + private String steps; + @EruptField( + views = @View( + title = "用例期望结果" + ), + edit = @Edit( + title = "用例期望结果", + type = EditType.CODE_EDITOR, notNull = true, + codeEditType = @CodeEditorType(language = "text") + ) + ) + private String expectedResult; + + + @EruptField( + views = @View( + title = "测试测试结果" + ), + edit = @Edit( + title = "测试测试结果", + type = EditType.INPUT, search = @Search, notNull = true + ) + ) + private String qaTestResult; + + + @EruptField( + views = @View( + title = "测试负责人" + ), + edit = @Edit( + title = "测试负责人", + type = EditType.INPUT, search = @Search, notNull = true + ) + ) + private String qaOwner; + + private String testCaseUUID; + + + public String getTestCaseUUID() { + return testCaseUUID; + } + + public void setTestCaseUUID(String testCaseUUID) { + this.testCaseUUID = testCaseUUID; + } + + public String getFeature() { + return feature; + } + + public void setFeature(String feature) { + this.feature = feature; + } + + public String getSummary() { + return summary; + } + + public void setSummary(String summary) { + this.summary = summary; + } + + public String getPriority() { + return priority; + } + + public void setPriority(String priority) { + this.priority = priority; + } + + public String getSteps() { + return steps; + } + + public void setSteps(String steps) { + this.steps = steps; + } + + public String getExpectedResult() { + return expectedResult; + } + + public void setExpectedResult(String expectedResult) { + this.expectedResult = expectedResult; + } + + + public String getQaTestResult() { + return qaTestResult; + } + + public void setQaTestResult(String qaTestResult) { + this.qaTestResult = qaTestResult; + } + + public String getQaOwner() { + return qaOwner; + } + + public void setQaOwner(String qaOwner) { + this.qaOwner = qaOwner; + } + + public TestRun getTestRun() { + return testRun; + } + + public void setTestRun(TestRun testRun) { + this.testRun = testRun; + } + + public String getTestScenario() { + return testScenario; + } + + public void setTestScenario(String testScenario) { + this.testScenario = testScenario; + } +} diff --git a/fluent-erupts/fluent-tc/src/main/java/io/fluentqa/tc/model/TestRun.java b/fluent-erupts/fluent-tc/src/main/java/io/fluentqa/tc/model/TestRun.java new file mode 100644 index 0000000..7d1c0b7 --- /dev/null +++ b/fluent-erupts/fluent-tc/src/main/java/io/fluentqa/tc/model/TestRun.java @@ -0,0 +1,249 @@ +package io.fluentqa.tc.model; + +import io.fluentqa.pm.product.model.Product; +import io.fluentqa.tc.handlers.GenerateTestRecordHandler; +import xyz.erupt.annotation.Erupt; +import xyz.erupt.annotation.EruptField; +import xyz.erupt.annotation.sub_erupt.Power; +import xyz.erupt.annotation.sub_erupt.RowOperation; +import xyz.erupt.annotation.sub_erupt.Tree; +import xyz.erupt.annotation.sub_field.Edit; +import xyz.erupt.annotation.sub_field.EditType; +import xyz.erupt.annotation.sub_field.View; +import xyz.erupt.annotation.sub_field.sub_edit.BoolType; +import xyz.erupt.annotation.sub_field.sub_edit.ReferenceTreeType; +import xyz.erupt.annotation.sub_field.sub_edit.Search; +import xyz.erupt.jpa.model.MetaModel; + +import javax.persistence.*; +import java.time.LocalDate; +import java.util.Set; + +//TODO: Filter By Status +//TODO: input by Uploaded File or File Sync +@Entity +@Table(name = "test_runs") +@Erupt(name = "测试执行计划", + power = @Power(importable = true, export = true), + tree = @Tree(id = "id", label = "name", pid = "parent.id"), + rowOperation = {@RowOperation( + title = "生成执行测试用例", + operationHandler = GenerateTestRecordHandler.class)}) + +public class TestRun extends MetaModel { + + @ManyToOne + @JoinColumn(name = "product_id") + @EruptField( + views = @View(title = "产品名称", column = "name"), + edit = @Edit( + search = @Search, + title = "产品选择", + type = EditType.REFERENCE_TREE, + desc = "动态获取产品", + referenceTreeType = @ReferenceTreeType( + pid = "parent.id")) + ) + private Product product; + + @ManyToOne + @EruptField( + edit = @Edit( + title = "父级测试安排", + type = EditType.REFERENCE_TREE, + referenceTreeType = @ReferenceTreeType(pid = "parent.id") + ) + ) + private TestRun parent; + + + @EruptField( + views = @View( + title = "测试负责人" + ), + edit = @Edit( + title = "测试负责人", + type = EditType.INPUT, search = @Search + ) + ) + private String testOwner; + + @JoinTable(name = "test_run_cases", + joinColumns = @JoinColumn(name = "test_run_id", referencedColumnName = "id"), + inverseJoinColumns = @JoinColumn(name = "test_case_id", referencedColumnName = "id")) + @ManyToMany(fetch = FetchType.EAGER) + @EruptField( + views = @View(title = "包含用例"), + edit = @Edit( + title = "包含用例", + type = EditType.TAB_TABLE_REFER + ) + ) + private Set testCases; + + @JoinTable(name = "test_run_scenario", + joinColumns = @JoinColumn(name = "test_run_id", referencedColumnName = "id"), + inverseJoinColumns = @JoinColumn(name = "test_scenario_id", referencedColumnName = "id")) + @ManyToMany(fetch = FetchType.EAGER) + @EruptField( + views = @View(title = "包含测试场景"), + edit = @Edit( + title = "包含测试场景", + type = EditType.TAB_TABLE_REFER + ) + ) + private Set testScenarios; + + public Product getProduct() { + return product; + } + + public void setProduct(Product product) { + this.product = product; + } + + public String getTestOwner() { + return testOwner; + } + + public void setTestOwner(String testOwner) { + this.testOwner = testOwner; + } + + public Set getTestCases() { + return testCases; + } + + public void setTestCases(Set testCases) { + this.testCases = testCases; + } + + public Set getTestScenarios() { + return testScenarios; + } + + public void setTestScenarios(Set testScenarios) { + this.testScenarios = testScenarios; + } + + public TestRun getParent() { + return parent; + } + + public void setParent(TestRun parent) { + this.parent = parent; + } + + @EruptField( + views = @View( + title = "名称" + ), + edit = @Edit( + title = "名称", + type = EditType.INPUT, search = @Search, notNull = true + ) + ) + private String name; + @EruptField( + views = @View( + title = "详细" + ), + edit = @Edit( + title = "详细", + type = EditType.INPUT, search = @Search, notNull = true + ) + ) + private String detail; + @EruptField( + views = @View( + title = "开始时间" + ), + edit = @Edit( + title = "开始时间", + type = EditType.DATE, search = @Search, + boolType = @BoolType + ) + ) + private LocalDate startDate; + @EruptField( + views = @View( + title = "预计完成时间" + ), + edit = @Edit( + title = "预计完成时间", + type = EditType.DATE, search = @Search, + boolType = @BoolType + ) + ) + private LocalDate estimatedCompletedDate; + @EruptField( + views = @View( + title = "完成时间" + ), + edit = @Edit( + title = "完成时间", + type = EditType.DATE, search = @Search, + boolType = @BoolType + ) + ) + private LocalDate completedDate; + @EruptField( + views = @View( + title = "当前状态" + ), + edit = @Edit( + title = "当前状态", + type = EditType.INPUT, search = @Search, notNull = true, + boolType = @BoolType + ) + ) + private String status; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getDetail() { + return detail; + } + + public void setDetail(String detail) { + this.detail = detail; + } + + public LocalDate getStartDate() { + return startDate; + } + + public void setStartDate(LocalDate startDate) { + this.startDate = startDate; + } + + public LocalDate getEstimatedCompletedDate() { + return estimatedCompletedDate; + } + + public void setEstimatedCompletedDate(LocalDate estimatedCompletedDate) { + this.estimatedCompletedDate = estimatedCompletedDate; + } + + public LocalDate getCompletedDate() { + return completedDate; + } + + public void setCompletedDate(LocalDate completedDate) { + this.completedDate = completedDate; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } +} diff --git a/fluent-erupts/fluent-tc/src/main/java/io/fluentqa/tc/model/TestScenario.java b/fluent-erupts/fluent-tc/src/main/java/io/fluentqa/tc/model/TestScenario.java new file mode 100644 index 0000000..42e4099 --- /dev/null +++ b/fluent-erupts/fluent-tc/src/main/java/io/fluentqa/tc/model/TestScenario.java @@ -0,0 +1,47 @@ +package io.fluentqa.tc.model; + +import io.fluentqa.erupts.base.model.NamedModelVO; +import xyz.erupt.annotation.Erupt; +import xyz.erupt.annotation.EruptField; +import xyz.erupt.annotation.sub_erupt.Power; +import xyz.erupt.annotation.sub_field.Edit; +import xyz.erupt.annotation.sub_field.EditType; +import xyz.erupt.annotation.sub_field.View; + +import javax.persistence.*; +import java.util.Set; + +/** + * 1. 创建测试场景,关联测试用例 + */ +@Entity +@Table(name = "test_scenarios") +@Erupt(name = "测试场景管理", + power = @Power(importable = true, export = true) + +) +//@PreDataProxy(value= TestScenarioCaseProxy.class) + +public class TestScenario extends NamedModelVO { + + @JoinTable(name = "test_scenario_cases", + joinColumns = @JoinColumn(name = "test_scenario_id", referencedColumnName = "id"), + inverseJoinColumns = @JoinColumn(name = "test_case_id", referencedColumnName = "id")) + @ManyToMany(fetch = FetchType.EAGER) + @EruptField( + views = @View(title = "包含用例"), + edit = @Edit( + title = "包含用例", + type = EditType.TAB_TABLE_REFER + ) + ) + private Set testCases; + + public Set getTestCases() { + return testCases; + } + + public void setTestCases(Set testCases) { + this.testCases = testCases; + } +} diff --git a/fluent-erupts/fluent-tc/src/main/java/io/fluentqa/tc/repo/TestCaseRepo.java b/fluent-erupts/fluent-tc/src/main/java/io/fluentqa/tc/repo/TestCaseRepo.java new file mode 100644 index 0000000..770f949 --- /dev/null +++ b/fluent-erupts/fluent-tc/src/main/java/io/fluentqa/tc/repo/TestCaseRepo.java @@ -0,0 +1,14 @@ +package io.fluentqa.tc.repo; + +import io.fluentqa.tc.model.TestCase; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface TestCaseRepo extends JpaRepository { + public TestCase findTestCaseByUuid(String uuid); + +// @Query(nativeQuery = true,value = "delete from test_cases where test_plan=:testPlan") +// @Modifying +// public void deleteByTestPlan(@Param("testPlan") String testPlan); +} diff --git a/fluent-erupts/fluent-tc/src/main/java/io/fluentqa/tc/repo/TestResultRepo.java b/fluent-erupts/fluent-tc/src/main/java/io/fluentqa/tc/repo/TestResultRepo.java new file mode 100644 index 0000000..8126135 --- /dev/null +++ b/fluent-erupts/fluent-tc/src/main/java/io/fluentqa/tc/repo/TestResultRepo.java @@ -0,0 +1,11 @@ +package io.fluentqa.tc.repo; + + +import io.fluentqa.tc.model.TestResult; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface TestResultRepo extends JpaRepository { + +} diff --git a/fluent-erupts/fluent-tc/src/main/java/io/fluentqa/tc/repo/TestRunRepo.java b/fluent-erupts/fluent-tc/src/main/java/io/fluentqa/tc/repo/TestRunRepo.java new file mode 100644 index 0000000..62c60d1 --- /dev/null +++ b/fluent-erupts/fluent-tc/src/main/java/io/fluentqa/tc/repo/TestRunRepo.java @@ -0,0 +1,11 @@ +package io.fluentqa.tc.repo; + + +import io.fluentqa.tc.model.TestRun; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface TestRunRepo extends JpaRepository { + +} diff --git a/fluent-erupts/fluent-tc/src/main/java/io/fluentqa/tc/service/TestCaseService.java b/fluent-erupts/fluent-tc/src/main/java/io/fluentqa/tc/service/TestCaseService.java new file mode 100644 index 0000000..fd247a4 --- /dev/null +++ b/fluent-erupts/fluent-tc/src/main/java/io/fluentqa/tc/service/TestCaseService.java @@ -0,0 +1,13 @@ +package io.fluentqa.tc.service; + +import io.fluentqa.pm.product.model.Product; +import io.fluentqa.tc.dto.TestCaseDTO; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +public interface TestCaseService { + + public void saveProductCases(List cases, Product product, Product module); +} diff --git a/fluent-erupts/fluent-tc/src/main/java/io/fluentqa/tc/service/impl/MindMappingService.java b/fluent-erupts/fluent-tc/src/main/java/io/fluentqa/tc/service/impl/MindMappingService.java new file mode 100644 index 0000000..b2d3fd0 --- /dev/null +++ b/fluent-erupts/fluent-tc/src/main/java/io/fluentqa/tc/service/impl/MindMappingService.java @@ -0,0 +1,57 @@ +package io.fluentqa.tc.service.impl; + + + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.util.StrUtil; +import io.fluentqa.erupts.base.proxies.AuditDataEnhancerProxy; +import io.fluentqa.mindmap.api.MindMapAccessor; +import io.fluentqa.pm.product.model.Product; +import io.fluentqa.tc.dto.TestCaseDTO; +import io.fluentqa.tc.model.TestCase; +import io.fluentqa.tc.repo.TestCaseRepo; +import org.springframework.stereotype.Service; +import xyz.erupt.jpa.model.MetaModel; + +import javax.annotation.Resource; +import javax.transaction.Transactional; +import java.util.List; +import java.util.stream.Collectors; + +/** + * 1.Import MindMapping file to test case database + * 2.export selected test cases as mindmapping file + */ +//TODO: convert to same TestCase Converter +@Service("mindMappingService") +public class MindMappingService { + @Resource + private TestCaseRepo testCaseRepo; + @Resource + private AuditDataEnhancerProxy auditDataEnhancerProxy; + + public List toTestCaseModel(String xmlFilePath) { + MindMapAccessor accessor = new MindMapAccessor(); + return accessor.readMindMapToBean(xmlFilePath, TestCaseDTO.class); + } + + @Transactional + public void saveTestCases(String xmlFilePath, MetaModel model) { + List testCaseModels = toTestCaseModel(xmlFilePath); + Product product = BeanUtil.getProperty(model, "product"); + Product module = BeanUtil.getProperty(model, "module"); + + List testCaseEntities = testCaseModels.stream().map(testCaseModel -> { + + TestCase tc = BeanUtil.copyProperties(testCaseModel, TestCase.class); + tc.setProduct(product); + tc.setModule(module); + tc.setSteps(StrUtil.join("\n", testCaseModel.getFeature(), + testCaseModel.getSummary(), testCaseModel.getSteps())); + auditDataEnhancerProxy.enhanceTimeAndUserAuditData(tc); + return tc; + }).collect(Collectors.toList()); + testCaseRepo.saveAll(testCaseEntities); + } + +} diff --git a/fluent-erupts/fluent-tc/src/main/java/io/fluentqa/tc/service/impl/TestCaseServiceImpl.java b/fluent-erupts/fluent-tc/src/main/java/io/fluentqa/tc/service/impl/TestCaseServiceImpl.java new file mode 100644 index 0000000..ff4c847 --- /dev/null +++ b/fluent-erupts/fluent-tc/src/main/java/io/fluentqa/tc/service/impl/TestCaseServiceImpl.java @@ -0,0 +1,77 @@ +package io.fluentqa.tc.service.impl; + + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.lang.UUID; +import cn.hutool.core.util.StrUtil; +import io.fluentqa.erupts.base.proxies.AuditDataEnhancerProxy; +import io.fluentqa.pm.product.model.Product; +import io.fluentqa.pm.product.service.ProductService; +import io.fluentqa.tc.dto.TestCaseDTO; +import io.fluentqa.tc.model.TestCase; +import io.fluentqa.tc.repo.TestCaseRepo; +import io.fluentqa.tc.service.TestCaseService; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import javax.transaction.Transactional; +import java.util.List; + +@Service +public class TestCaseServiceImpl implements TestCaseService { + @Resource + private TestCaseRepo testCaseRepo; + @Resource + private ProductService productMetaService; + + @Resource + private AuditDataEnhancerProxy + auditDataEnhancerProxy; + @Override + @Transactional + @Async + /** + * notice:parent Product can't be created + * Two scenarios: + * 1. New Cases added: uuid is null + * A. Use Excel Product/Module + * B. Us Excel Product/Module is not existing, use file upload Product Module + * 2. Existing Case updated: + * A. UUID is found, and update the existing row + * B. UUID is not found, create a new row + */ + public void saveProductCases(List cases, Product parentProduct, Product module) { + for (TestCaseDTO aCase : cases) { + TestCase tcEntity; + if(StrUtil.isBlank(aCase.getUuid())) { + tcEntity = BeanUtil.copyProperties(aCase, TestCase.class); + tcEntity.setUuid( UUID.fastUUID().toString(true)); + }else{ + tcEntity = testCaseRepo.findTestCaseByUuid(aCase.getUuid()); + if(tcEntity == null){ + tcEntity = BeanUtil.copyProperties(aCase, TestCase.class); + }else{ + BeanUtil.copyProperties(aCase,tcEntity,"id"); + } + } + + if (StrUtil.isBlank(aCase.getUuid())) { + tcEntity.setUuid(UUID.randomUUID().toString()); + } + tcEntity.setProduct(parentProduct); + if (StrUtil.isBlank(aCase.getModuleName())) { + tcEntity.setModule(module); + } else { + Product newModule = productMetaService.createModuleIfNotExist(parentProduct.getId(), aCase.getModuleName()); + tcEntity.setModule(newModule); + } + if(tcEntity.getPriority() ==null) { + tcEntity.setPriority("P2"); + } + tcEntity.setProduct(parentProduct); + auditDataEnhancerProxy.enhanceTimeAndUserAuditData(tcEntity); + testCaseRepo.save(tcEntity); + } + } +} diff --git a/package.sh b/package.sh new file mode 100644 index 0000000..8a39808 --- /dev/null +++ b/package.sh @@ -0,0 +1,2 @@ + mvn clean package -Dmaven.test.skip=true + cp -rf server/target/*.jar . \ No newline at end of file diff --git a/pom.xml b/pom.xml index b5b858b..11d9218 100644 --- a/pom.xml +++ b/pom.xml @@ -16,7 +16,7 @@ 1.12.2 - 1.0.SNAPSHOT + 1.0-SNAPSHOT 42.5.1 UTF-8