- Go to the Flatlogic.
- In the list of available templates, select Community template.
The cheatsheet below describes the API for customizing this template: the variables, macros, and syntax available during generation.
Click to see the full example of the JSON schema
{
  "entities": [
    {
      "name": "users",
      "show_field": "firstName",
      "fields": [
        {
          "type": "string",
          "name": "firstName",
          "title": "First Name",
          "show_in_form": true,
          "show_in_table": true,
          "editable": false,
          "unique": false,
          "multiline": false
        },
        {
          "type": "string",
          "name": "lastName",
          "title": "Last Name",
          "show_in_form": true,
          "show_in_table": true,
          "editable": false,
          "unique": false,
          "multiline": false
        },
        {
          "type": "string",
          "name": "phoneNumber",
          "title": "Phone Number",
          "show_in_form": true,
          "show_in_table": true,
          "editable": false,
          "unique": false,
          "multiline": false
        },
        {
          "type": "string",
          "name": "email",
          "title": "E-Mail",
          "show_in_form": true,
          "show_in_table": true,
          "editable": false,
          "unique": true,
          "multiline": false
        },
        {
          "type": "boolean",
          "name": "disabled",
          "title": "Disabled",
          "show_in_form": true,
          "show_in_table": true,
          "editable": false,
          "unique": false
        },
        {
          "type": "images",
          "name": "avatar",
          "title": "Avatar",
          "show_in_form": true,
          "show_in_table": true,
          "editable": false,
          "unique": false
        },
        {
          "type": "string",
          "name": "password",
          "title": "Password",
          "show_in_form": false,
          "show_in_table": false,
          "editable": false,
          "unique": false,
          "multiline": false
        },
        {
          "show_in_form": false,
          "show_in_table": false,
          "editable": false,
          "unique": false,
          "type": "boolean",
          "name": "emailVerified",
          "title": "Email Verified"
        },
        {
          "type": "string",
          "name": "emailVerificationToken",
          "title": "Email Verification Token",
          "show_in_form": false,
          "show_in_table": false,
          "editable": false,
          "unique": false,
          "multiline": false
        },
        {
          "type": "datetime",
          "name": "emailVerificationTokenExpiresAt",
          "title": "Email Verification Token Expires At",
          "show_in_form": false,
          "show_in_table": false,
          "editable": false,
          "unique": false
        },
        {
          "type": "string",
          "name": "passwordResetToken",
          "title": "Password Reset Token",
          "show_in_form": false,
          "show_in_table": false,
          "editable": false,
          "unique": false,
          "multiline": false
        },
        {
          "type": "datetime",
          "name": "passwordResetTokenExpiresAt",
          "title": "Password Reset Token Expires At",
          "show_in_form": false,
          "show_in_table": false,
          "editable": false,
          "unique": false
        },
        {
          "type": "string",
          "name": "provider",
          "title": "Provider",
          "show_in_form": false,
          "show_in_table": false,
          "editable": false,
          "unique": false,
          "multiline": false
        },
        {
          "name": "app_role",
          "type": "relation_one",
          "show_in_form": true,
          "show_in_table": true,
          "editable": false,
          "title": "App Role",
          "unique": false,
          "ref": "roles"
        },
        {
          "name": "custom_permissions",
          "type": "relation_many",
          "show_in_form": true,
          "show_in_table": true,
          "editable": false,
          "title": "Custom Permissions",
          "unique": false,
          "ref": "permissions"
        }
      ]
    },
    {
      "name": "roles",
      "show_field": "name",
      "editable": false,
      "fields": [
        {
          "name": "name",
          "type": "string",
          "multiline": false,
          "wysiwygEditor": false,
          "show_in_form": true,
          "show_in_table": true,
          "editable": false,
          "title": "Name",
          "unique": false
        },
        {
          "name": "role_customization",
          "type": "string",
          "multiline": false,
          "wysiwygEditor": false,
          "show_in_form": false,
          "show_in_table": false,
          "editable": false,
          "title": "Role Customization",
          "unique": false
        },
        {
          "name": "permissions",
          "type": "relation_many",
          "show_in_form": true,
          "show_in_table": true,
          "editable": false,
          "title": "Permissions",
          "unique": false,
          "ref": "permissions"
        }
      ]
    },
    {
      "name": "permissions",
      "show_field": "name",
      "editable": false,
      "fields": [
        {
          "name": "name",
          "type": "string",
          "multiline": false,
          "wysiwygEditor": false,
          "show_in_form": true,
          "show_in_table": true,
          "editable": false,
          "title": "Name",
          "unique": false
        }
      ]
    }
  ],
  "short_description": "A comprehensive hub for managing online education courses and users.",
  "title": "My Project"
}| Variable | Type | Meaning | 
|---|---|---|
| @schema | Hash | Full JSON project skeleton. | 
| @entities | Array<Hash> | Shortcut for @schema['entities']. | 
| @migrations,@seeds | Array | Raw migration / seed arrays. | 
| @project_with_web_site | Boolean | trueif the project includes a public web-site. | 
| @component_types | Array<String> | Unique list of component types used by the web-site. | 
| Variable | Type | Meaning | 
|---|---|---|
| @name | String | Current entity name ( snake_case). | 
| @entity | Hash | Full entity record. | 
| @fields | Array<Hash> | Shortcut for @entity['fields']. | 
| @all_fields | Array<Hash> | All fields from all entities; each field has field['entity_name']. | 
field = {
  '@name'     => 'firstName',
  '@name_cap' => 'FirstName',
  '@type'     => 'string',
  '@ref'      => 'users',          # present only for relations
  'title'     => 'First Name',
  'unique'    => false,
  # …plus any other keys from the schema
}
| Macro | Replaced by | 
|---|---|
| ((name))/{{name}} | users | 
| ((Name))/{{Name}} | Users | 
| ((NAME)) | USERS | 
| {{migration-timestamp}} | Epoch ms of the migration | 
| {{seed-timestamp}} | YYYYMMDDHHMMSSof the seed | 
Any path that contains one of these tokens is cloned for each entity.
form_fields = @fields.select { |f| f['@type'] == 'relation_one' }
form_fields.each do |f|
  await ((name)).set<%= f['@name_cap'] %>(data.<%= f['@name'] %> || null, { transaction })
endexport const routes = [
<% @entities.each_with_index do |e, i| %>
  { path: '/<%= e['@name'] %>', label: '<%= e['@name_cap'] %>' }<%= ',' unless i == @entities.size - 1 %>
<% end %>
];  attributes: {
<% @fields.select { |f| %w[string int decimal boolean date datetime enum].include?(f['@type']) }.each do |f| %>
  <%= f['@name'] %>: {
    type: DataTypes.<%= get_sequelize_field_type(f['@type']) %>,
  },
<% end %>
},<!-- enums.ts -->
<% @entities.each do |e| %>
    <% e['fields'].select { |f| f['@type'] == 'enum' }.each do |f| %>
    export enum <%= e['@name_cap'] %><%= f['@name_cap'] %>Enum {
        <% f['options'].each do |o| %>
          <%= o.upcase %> = '<%= o %>',
        <% end %>
    }
    <% end %>
<% end %># migration_log.md
<% @migrations.each do |m| %>
### <%= Time.at(m['time'] / 1000).utc.strftime('%Y-%m-%d %H:%M:%S') %>
<% m['changes'].each do |ch| %>
- **<%= ch['type'] %>** on **<%= ch.dig('payload','table') || ch['tables'] %>**
<% end %>
<% end %>