Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

I'm working on a tool to transform what I call an Application Definition File (a format specified as a JSON schema) into a line-of business NodeJS/Express/Postgres web app.

You might think of it a lo-code tool, but I'm aiming more for it to be a no-code tool, as in the level of sophistication should be such that there is rarely a need to touch the generated application.

Here is a sample application definition file (to model an app for the tool itself):

   {
 "name": "VReal",
 "description": "Virtual realtor web app",
 "entities": {
  "propertyHeader": {
   "title": "Listing Header",
   "description": "The headers for all listings, whether sale or rental",
   "namePlural": "listingHeaders",
   "fields": {
    "title": "medium_text",
    "description": "long_text",
    "propertyType": [
     "apartment",
     "office",
     "shop",
     "house"
    ],
    "currency": "short_text",
    "squareFeet": {
     "optional": true,
     "type": "integer"
    },
    "bedrooms": "integer",
    "bathrooms": "integer",
    "garages": "integer",
    "hall": "boolean",
    "kitchen": "boolean",
    "furnished": "boolean",
    "neighborhood": "medium_text",
    "latitude": {
     "optional": true,
     "type": "float"
    },
    "longitude": {
     "optional": true,
     "type": "float"
    },
    "phone": "phone_number",
    "phoneAlt": {
     "type": "phone_number",
     "optional": true,
     "title": "Alternative Phone"
    },
    "email": "email_address",
    "contact": "medium_text",
    "whenPosted": "datetime",
    "externalUrl": {
     "optional": true,
     "type": "url"
    }
   },
   "parentsManyToMany": [
    "project"
   ],
   "parentsOneToMany": [
    "city"
   ]
  },
  "propertyForLease": {
   "title": "Property for Lease",
   "namePlural": "propertiesForLease",
   "extends": "propertyHeader",
   "fields": {
    "basePeriod": [
     "month",
     "day",
     "week",
     "hour",
     "quarter"
    ],
    "pricePerPeriod": "integer",
    "termNumPeriods": {
     "type": "integer",
     "title": "Rental Lease Term (Base periods)"
    },
    "advanceNumPeriods": {
     "type": "integer",
     "title": "Advance Required (Base periods)"
    }
   }
  },
  "propertyForSale": {
   "title": "Property for Sale",
   "namePlural": "propertiesForSale",
   "extends": "propertyHeader",
   "fields": {
    "salePrice": "integer"
   }
  },
  "propertyMessage": {
   "title": "Message",
   "namePlural": "propertyMessages",
   "fields": {
    "direction": [
     "incoming",
     "outgoing"
    ],
    "content": "long_text",
    "timestamp": "datetime"
   },
   "parentsOneToMany": [
    "propertyHeader",
    "user"
   ]
  },
  "project": {
   "title": "Project",
   "description": "Projects in which users an place properties",
   "namePlural": "projects",
   "fields": {
    "name": "medium_text",
    "description": "long_text"
   }
  },
  "listingMedia": {
   "title": "Listing Media",
   "description": "Media (images, videos, etc) for listings",
   "namePlural": "listingMedia",
   "fields": {
    "content": "media"
   },
   "readonly": false,
   "parents": [
    "propertyForLease",
    "propertyForSale"
   ]
  },
  "city": {
   "title": "City",
   "description": "Cities in which properties are located",
   "namePlural": "Cities",
   "fields": {
    "name": "medium_text",
    "latitude": {
     "optional": true,
     "type": "float"
    },
    "longitude": {
     "optional": true,
     "type": "float"
    }
   }
  }
 },
 "UI": {
  "pages": {
   "perEntity": {
    "propertyForLease": {
     "objectEditor": {
      "kind": "form",
      "columns": "dynamic"
     },
     "objectListViewer": {
      "container": {
       "control": "list",
       "orientation": "vertical",
       "template": {
        "fields": [
         "title",
         "pricePerPeriod",
         "basePeriod",
         "whenPosted",
         "listingMedia#content"
        ],
        "labels": "caption"
       }
      }
     },
     "editingStrategy": "only-devs"
    },
    "propertyForSale": {
     "objectEditor": {
      "kind": "form",
      "columns": "dynamic"
     },
     "objectListViewer": {
      "container": {
       "control": "list",
       "orientation": "vertical",
       "template": {
        "fields": []
       }
      }
     },
     "editingStrategy": "only-devs"
    },
    "listingMedia": {
     "objectEditor": {
      "kind": "form",
      "columns": "dynamic"
     },
     "objectListViewer": {
      "container": {
       "control": "list",
       "orientation": "vertical",
       "template": {
        "fields": []
       }
      }
     }
    }
   },
   "custom": {
    "404": {},
    "splash": {
     "slogan": "Supercharge your real estate acquisition",
     "description": "VReal is your virtual real estate agent that provides superior and fast service, backed by an outstanding human team you can speak to",
     "callToAction": "Get Started",
     "inputForCTA": {
      "name": "search",
      "description": ""
     },
     "targetUrlForCTA": "/listings",
     "smallPrintForCTA": "",
     "extraContentUrl": "",
     "corporateUsers": []
    },
    "login": {},
    "register": {},
    "userVerify": {},
    "userAccount": {}
   }
  },
  "initialAdhocPage": "splash",
  "initialSessionPage": "propertyForLease",
  "elements": {
   "menu": "hierarchical-entity-groups",
   "footer": {
    "copyright": "© Example Systems, LLC. 2022. All rights reserved.",
    "linkSets": [
     {
      "header": "Company",
      "links": [
       {
        "title": "About Us",
        "url": "/about"
       },
       {
        "title": "Contact Us",
        "url": "/contact"
       },
       {
        "title": "Partners",
        "url": "/partners"
       },
       {
        "title": "Careers",
        "url": "/careers"
       },
       {
        "title": "Newsroom",
        "url": "/news"
       },
       {
        "title": "Blog",
        "url": "/blog"
       },
       {
        "title": "Events",
        "url": "/events"
       }
      ]
     },
     {
      "header": "Support",
      "links": [
       {
        "title": "Guides",
        "url": "/help/docs"
       },
       {
        "title": "Forum",
        "url": "/help/forum"
       },
       {
        "title": "Chat",
        "url": "/help/chat"
       },
       {
        "title": "Privacy",
        "url": "/privacy"
       },
       {
        "title": "Terms",
        "url": "/terms"
       }
      ]
     },
     {
      "header": "Platform",
      "links": [
       {
        "title": "Developer API",
        "url": "/help/api"
       },
       {
        "title": "Integrations",
        "url": "/help/integrate"
       }
      ]
     }
    ],
    "socialMediaLinks": {
     "twitter": "https://twitter.com/VReal",
     "facebook": "https://www.facebook.com/VReal/",
     "instagram": "https://www.instagram.com/VReal",
     "linkedin": "https://www.linkedin.com/company/VReal/"
    },
    "mobileAppLinks": {
     "iosAppStore": "https://itunes.apple.com/US/app/id914172636",
     "googlePlayStore": "http://example.com/z/buying/app-download?btn_android-download"
    }
   }
  },
  "architecture": {}
 },
 "security": {
  "level": "authentication",
  "userIdType": "sim",
  "factors": {
   "password": {
    "validityRules": {}
   },
   "email": {}
  }
 }
}


Consider applying for YC's Summer 2026 batch! Applications are open till May 4

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: