{"id":267,"date":"2026-01-05T23:56:18","date_gmt":"2026-01-05T22:56:18","guid":{"rendered":"https:\/\/www.genexio.net\/blog\/?p=267"},"modified":"2026-01-21T07:48:37","modified_gmt":"2026-01-21T06:48:37","slug":"building-a-custom-english-learning-app-with-filemaker-node-red-and-chatgpt-api-json","status":"publish","type":"post","link":"https:\/\/www.genexio.net\/blog\/2026\/01\/05\/building-a-custom-english-learning-app-with-filemaker-node-red-and-chatgpt-api-json\/","title":{"rendered":"Building a Custom English Learning App with FileMaker, Node-RED, and ChatGPT (API + JSON)"},"content":{"rendered":"\n<p>Note: there are many great apps to learn English. I wanted something different: a custom system built for me, with a clear logic and structured data. So I combined FileMaker (core data + UI), Node-RED (automation), and AI via API (ChatGPT) to generate learning content and feedback in a controlled way.<\/p>\n\n\n\n<p>The goal is a repeatable, measurable workflow:<\/p>\n\n\n\n<p><strong>content \u2192 words \u2192 exercises \u2192 feedback \u2192 score \u2192 review<\/strong><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\">Architecture (short but concrete)<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>FileMaker<\/strong>: database, interface, history, scores, levels, review, reports.<\/li>\n\n\n\n<li><strong>Node-RED<\/strong>: automation and integrations (scheduled content import).<\/li>\n\n\n\n<li><strong>AI (ChatGPT API)<\/strong>: structured outputs to feed fields and logic without \u201cnoise\u201d.<\/li>\n<\/ul>\n\n\n\n<p>The key difference is that AI is not used as a generic chat. It is a component inside a system: output in <strong>JSON<\/strong>, parsing and saving into the right fields, plus logging for debugging and maintenance.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\">Section 1 \u2014 Automatic Engoo import + main word extraction<\/h4>\n\n\n\n<p>Every day, the app automatically imports <strong>one Engoo news article per day<\/strong> (selected from the most recently published items). The import is handled by <strong>Node-RED<\/strong>, then the content is saved into FileMaker and deduplicated using <code>news_url<\/code> as a unique key.<\/p>\n\n\n\n<p>Thanks to <strong>Engoo<\/strong> for making this learning material available.<\/p>\n\n\n\n<p><strong>Example dedup logic (FileMaker):<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Set Variable &#91; $url ; Value: &lt;article_url&gt; ]\nGo to Layout &#91; \u201ccontents\u201d (contents) ]\nEnter Find Mode &#91; Pause: Off ]\nSet Field &#91; contents::news_url ; $url ]\nPerform Find\nIf &#91; Get ( FoundCount ) &gt; 0 ]\n  Exit Script &#91; Result: \"ALREADY_IMPORTED\" ]\nEnd If\nNew Record\/Request\nSet Field &#91; contents::news_url ; $url ]\nSet Field &#91; contents::ts_import ; Get ( CurrentTimestamp ) ]\nCommit Records<\/code><\/pre>\n\n\n\n<p>Right after import, the system extracts the <strong>main words<\/strong> (keywords) from the text. This is the step that turns reading into study material (vocabulary + exercises).<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\">Section 2 \u2014 Words: vocabulary cards (AI + structured data + MP3)<\/h4>\n\n\n\n<p>For each extracted word (or a word added manually), I generate a complete vocabulary card using AI:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>simple meaning in English<\/li>\n\n\n\n<li>Italian translation<\/li>\n\n\n\n<li>synonyms<\/li>\n\n\n\n<li>example sentences<\/li>\n\n\n\n<li>word type (noun\/verb\/adj\u2026)<\/li>\n\n\n\n<li>pronunciation (IPA + \u201ceasy\u201d version)<\/li>\n\n\n\n<li><strong>MP3<\/strong> pronunciation saved as a container file<\/li>\n<\/ul>\n\n\n\n<p><strong>Technical choice:<\/strong> the AI returns output in <strong>JSON<\/strong> (controlled schema). FileMaker extracts values with <code>JSONGetElement<\/code> and saves them into the correct fields. This makes the data searchable, reusable, and ready for reports and review.<\/p>\n\n\n\n<p><strong>Example \u201cWords\u201d schema (simplified) built with JSONSetElement:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Set Variable &#91; $schemaWords ;\n  JSONSetElement ( \"{}\" ;\n    &#91; \"type\" ; \"object\" ; JSONString ] ;\n    &#91; \"properties.word_type.type\" ; \"string\" ; JSONString ] ;\n    &#91; \"properties.meaning_en.type\" ; \"string\" ; JSONString ] ;\n    &#91; \"properties.meaning_it.type\" ; \"string\" ; JSONString ] ;\n\n    &#91; \"properties.synonyms.type\" ; \"array\" ; JSONString ] ;\n    &#91; \"properties.synonyms.items.type\" ; \"string\" ; JSONString ] ;\n\n    &#91; \"properties.examples.type\" ; \"array\" ; JSONString ] ;\n    &#91; \"properties.examples.items.type\" ; \"string\" ; JSONString ] ;\n\n    &#91; \"properties.pron_ipa.type\" ; \"string\" ; JSONString ] ;\n    &#91; \"properties.pron_easy.type\" ; \"string\" ; JSONString ] ;\n\n    &#91; \"additionalProperties\" ; 0 ; JSONBoolean ]\n  )\n]<\/code><\/pre>\n\n\n\n<p><strong>Example AI response (JSON):<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>{\n  \"word_type\": \"verb\",\n  \"meaning_en\": \"to save someone from danger\",\n  \"meaning_it\": \"salvare, soccorrere\",\n  \"synonyms\": &#91;\"save\", \"help\", \"recover\"],\n  \"examples\": &#91;\n    \"Firefighters rescued the child from the building.\",\n    \"They rescued the project at the last minute.\"\n  ],\n  \"pron_ipa\": \"\/\u02c8res.kju\u02d0\/\",\n  \"pron_easy\": \"RES-kyoo\"\n}<\/code><\/pre>\n\n\n\n<p><strong>Saving into fields (FileMaker):<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Set Field &#91; words::word_type ; JSONGetElement ( $resp ; \"word_type\" ) ]\nSet Field &#91; words::meaning_en ; JSONGetElement ( $resp ; \"meaning_en\" ) ]\nSet Field &#91; words::meaning_it ; JSONGetElement ( $resp ; \"meaning_it\" ) ]\nSet Field &#91; words::pron_ipa ; JSONGetElement ( $resp ; \"pron_ipa\" ) ]\nSet Field &#91; words::pron_easy ; JSONGetElement ( $resp ; \"pron_easy\" ) ]\n\nSet Field &#91; words::synonyms_json ; JSONGetElement ( $resp ; \"synonyms\" ) ]\nSet Field &#91; words::examples_json ; JSONGetElement ( $resp ; \"examples\" ) ]<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\">Section 3 \u2014 Translate: EN \u21c4 IT (AI)<\/h4>\n\n\n\n<p>Two-way translation (English \u2192 Italian and Italian \u2192 English), with saved history. Here too, I use JSON to keep outputs predictable and reusable (not \u201cthrow-away\u201d translations).<\/p>\n\n\n\n<p><strong>Minimal schema example (concept):<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>JSONSetElement ( \"{}\" ;\n  &#91; \"type\" ; \"object\" ; JSONString ] ;\n  &#91; \"properties.english_text.type\" ; \"string\" ; JSONString ] ;\n  &#91; \"properties.italian_text.type\" ; \"string\" ; JSONString ] ;\n  &#91; \"additionalProperties\" ; 0 ; JSONBoolean ]\n)<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\">Section 4 \u2014 Exercises: the core of the project (everything saved and linked to words)<\/h4>\n\n\n\n<p>The vocabulary section is important, but the real value is <strong>Exercises<\/strong>: this is where I produce English (writing, listening, dialogue), so I can measure real mistakes, progress, and weak points.<\/p>\n\n\n\n<p><strong>Core rule:<\/strong> every exercise is <strong>saved<\/strong> and <strong>linked to words<\/strong>. This enables navigation and reporting such as:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u201call exercises linked to word X\u201d<\/li>\n\n\n\n<li>\u201cwhich words appear most often in mistakes\u201d<\/li>\n\n\n\n<li>\u201cmost frequent error categories\u201d<\/li>\n\n\n\n<li>\u201cwhich exercises to repeat because score is low\u201d<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\">Practical implementation \u2014 suggested tables and relationships<\/h4>\n\n\n\n<p><strong>contents<\/strong> (imported news): <code>id_content<\/code>, <code>news_url<\/code> (unique), <code>title<\/code>, <code>body_text<\/code>, <code>ts_import<\/code>, <code>source<\/code>.<\/p>\n\n\n\n<p><strong>words<\/strong> (vocabulary): <code>id_word<\/code>, <code>word<\/code>, <code>word_type<\/code>, <code>meaning_en<\/code>, <code>meaning_it<\/code>, <code>synonyms_json<\/code>, <code>examples_json<\/code>, <code>pron_ipa<\/code>, <code>pron_easy<\/code>, <code>audio_mp3<\/code>.<\/p>\n\n\n\n<p><strong>exercises<\/strong> (all exercises):<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>id_exercise<\/code> (serial)<\/li>\n\n\n\n<li><code>exercise_type<\/code> (e.g. <code>writing_free<\/code>, <code>dictation<\/code>, <code>questions<\/code>, <code>errors_ita<\/code>, <code>verb_use<\/code>, <code>to_keep<\/code>)<\/li>\n\n\n\n<li><code>difficulty_level<\/code>, <code>prompt_topic<\/code> (optional)<\/li>\n\n\n\n<li><code>input_text<\/code>, <code>target_text<\/code> (dictation), <code>corrected_text<\/code>, <code>natural_text<\/code><\/li>\n\n\n\n<li><code>feedback<\/code>, <code>error_tags_json<\/code><\/li>\n\n\n\n<li><code>score<\/code>, <code>new_level<\/code>, <code>next_review_ts<\/code><\/li>\n\n\n\n<li><code>id_content_fk<\/code> (if it comes from a news item)<\/li>\n<\/ul>\n\n\n\n<p><strong>exercise_words<\/strong> (bridge table exercises \u2194 words): <code>id_exercise_fk<\/code>, <code>id_word_fk<\/code>, <code>role<\/code> (optional).<\/p>\n\n\n\n<p><strong>Relationships (concept):<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>contents::id_content = exercises::id_content_fk<\/code><\/li>\n\n\n\n<li><code>exercises::id_exercise = exercise_words::id_exercise_fk<\/code><\/li>\n\n\n\n<li><code>words::id_word = exercise_words::id_word_fk<\/code><\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\">Section 4A \u2014 Free writing (sentences and short texts)<\/h4>\n\n\n\n<p>I write free text in English and the AI returns correction, a more natural version, feedback, and a score\/level. The value is that everything is saved, so I can review mistakes and progress over time.<\/p>\n\n\n\n<p><strong>Example AI response (JSON):<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>{\n  \"corrected_text\": \"I try not to translate because I think it is useful for my brain.\",\n  \"natural_text\": \"I try not to translate because I feel it helps my brain.\",\n  \"feedback\": \"Use 'try not to' instead of 'try don\u2019t'.\",\n  \"error_tags\": &#91;\"italian_interference\", \"negation\", \"style\"],\n  \"score\": 82,\n  \"new_level\": 3,\n  \"days_until_next_review\": 7,\n  \"linked_words\": &#91;\"translate\", \"useful\", \"brain\"]\n}<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\">Section 4B \u2014 Dictation: write a sentence after listening to audio<\/h4>\n\n\n\n<p>I listen to a sentence (audio) and then I write it. The AI checks accuracy and highlights typical issues (prepositions, collocations, natural phrasing), then assigns a score. This is effective because it trains listening + writing together.<\/p>\n\n\n\n<p><strong>Example AI response (JSON):<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>{\n  \"target_text\": \"It takes about ten minutes to get home.\",\n  \"user_text\": \"It takes 10 minutes by home.\",\n  \"corrected_text\": \"It takes about ten minutes to get home.\",\n  \"feedback\": \"Say 'to get home' or 'to go home', not 'by home'.\",\n  \"error_tags\": &#91;\"preposition\", \"natural_phrase\"],\n  \"score\": 65,\n  \"new_level\": 2,\n  \"days_until_next_review\": 3,\n  \"linked_words\": &#91;\"take\", \"minutes\", \"get home\"]\n}<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\">Section 4C \u2014 Errors_ita and verb use: targeted exercises and error classification<\/h4>\n\n\n\n<p>Here the goal is not only to correct, but also to <strong>classify<\/strong> the mistake: Italian interference, verb form, tense, prepositions, articles, etc. These categories (tags) become data: I can filter, build statistics, and generate targeted practice later.<\/p>\n\n\n\n<p><strong>Example AI response (JSON):<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>{\n  \"corrected_text\": \"Tomorrow I will meet my wife.\",\n  \"feedback\": \"After 'will', use the base form: will meet, will go, will do.\",\n  \"error_tags\": &#91;\"verb_form\", \"past_vs_base_form\"],\n  \"italian_interference\": \"In Italian, the difference between base form and past form is less obvious here.\",\n  \"mini_rule\": \"After 'will', use the base form.\",\n  \"score\": 72,\n  \"new_level\": 3,\n  \"days_until_next_review\": 7,\n  \"linked_words\": &#91;\"will\", \"meet\"]\n}<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\">Section 4D \u2014 Questions: simulated dialogue (topic + level)<\/h4>\n\n\n\n<p>I choose a topic and a difficulty level and simulate a conversation: question, answer, correction, and better alternatives. I also added an anti-repetition logic to push for truly different questions (not just small rephrases).<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\">Section 4E \u2014 To keep: save typical phrases<\/h4>\n\n\n\n<p>When I find useful and reusable phrases (typical, natural, \u201cwork-ready\u201d), I save them in a \u201cTo keep\u201d section. These phrases can also be linked to words and categories, so they stay inside the system (not scattered notes).<\/p>\n\n\n\n<p><strong>Example AI response (JSON):<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>{\n  \"keep_phrase\": \"Just let me know.\",\n  \"meaning_it\": \"Fammi sapere.\",\n  \"when_to_use\": \"When you want someone to update you later.\",\n  \"variants\": &#91;\"Let me know.\", \"Just let me know when you can.\"],\n  \"linked_words\": &#91;\"know\", \"let\"]\n}<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\">Single JSON schema for Exercises (standardize the output)<\/h4>\n\n\n\n<p>To manage multiple exercise types consistently, I use one common schema (with optional fields depending on the type). This keeps the pipeline stable: same parsing\/saving logic even when the exercise changes.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Set Variable &#91; $schemaExercise ;\n  JSONSetElement ( \"{}\" ;\n    &#91; \"type\" ; \"object\" ; JSONString ] ;\n\n    &#91; \"properties.corrected_text.type\" ; \"string\" ; JSONString ] ;\n    &#91; \"properties.natural_text.type\" ; \"string\" ; JSONString ] ;\n    &#91; \"properties.feedback.type\" ; \"string\" ; JSONString ] ;\n\n    &#91; \"properties.error_tags.type\" ; \"array\" ; JSONString ] ;\n    &#91; \"properties.error_tags.items.type\" ; \"string\" ; JSONString ] ;\n\n    &#91; \"properties.score.type\" ; \"number\" ; JSONString ] ;\n    &#91; \"properties.new_level.type\" ; \"number\" ; JSONString ] ;\n    &#91; \"properties.days_until_next_review.type\" ; \"number\" ; JSONString ] ;\n\n    &#91; \"properties.linked_words.type\" ; \"array\" ; JSONString ] ;\n    &#91; \"properties.linked_words.items.type\" ; \"string\" ; JSONString ] ;\n\n    &#91; \"additionalProperties\" ; 0 ; JSONBoolean ]\n  )\n]<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\">Compute next_review_ts (simple spaced repetition)<\/h4>\n\n\n\n<p>After the AI response, I use <code>days_until_next_review<\/code> to compute the next review date\/time.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Set Variable &#91; $days ; Value: JSONGetElement ( $resp ; \"days_until_next_review\" ) ]\nSet Field &#91; exercises::next_review_ts ;\n  GetAsTimestamp ( Get ( CurrentTimestamp ) + ( $days * 86400 ) )\n]<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\">Link exercise \u2194 words (bridge table)<\/h4>\n\n\n\n<p>A practical workflow is to have the AI return <code>linked_words[]<\/code>. Then, for each linked word:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>normalize it (trim\/lowercase)<\/li>\n\n\n\n<li>find it in <code>words<\/code> (create it if missing)<\/li>\n\n\n\n<li>create a record in <code>exercise_words<\/code><\/li>\n<\/ul>\n\n\n\n<p>This way every exercise is searchable \u201cby word\u201d, and every word shows portals with linked exercises.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\">AI as a system component: API + JSON + logging<\/h4>\n\n\n\n<p>AI calls are managed as a single module (one FileMaker function\/script): it builds the JSON payload, runs the API request, validates\/parses the JSON response, and saves logs for requests\/responses\/errors. This keeps the integration maintainable and scalable (new exercises, new sections, voice in the future, etc.).<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\">Thanks<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Engoo<\/strong> for the content.<\/li>\n\n\n\n<li><strong>Peter<\/strong>, my English teacher, for keeping my motivation alive over time.<\/li>\n\n\n\n<li><strong>Giulio Villani<\/strong> for FileMaker teaching.<\/li>\n\n\n\n<li><strong>Fabio Bosisio<\/strong> for support on FileMaker and Node-RED.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"472\" height=\"1024\" data-id=\"271\" src=\"https:\/\/www.genexio.net\/blog\/wp-content\/uploads\/2026\/01\/IMG_6683-472x1024.png\" alt=\"IMG 6683 472x1024\" class=\"wp-image-271\" title=\"Building a Custom English Learning App with FileMaker, Node-RED, and ChatGPT (API + JSON)\" srcset=\"https:\/\/www.genexio.net\/blog\/wp-content\/uploads\/2026\/01\/IMG_6683-472x1024.png 472w, https:\/\/www.genexio.net\/blog\/wp-content\/uploads\/2026\/01\/IMG_6683-138x300.png 138w, https:\/\/www.genexio.net\/blog\/wp-content\/uploads\/2026\/01\/IMG_6683-768x1665.png 768w, https:\/\/www.genexio.net\/blog\/wp-content\/uploads\/2026\/01\/IMG_6683-709x1536.png 709w, https:\/\/www.genexio.net\/blog\/wp-content\/uploads\/2026\/01\/IMG_6683-945x2048.png 945w, https:\/\/www.genexio.net\/blog\/wp-content\/uploads\/2026\/01\/IMG_6683-scaled.png 1181w\" sizes=\"auto, (max-width: 472px) 100vw, 472px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"472\" height=\"1024\" data-id=\"269\" src=\"https:\/\/www.genexio.net\/blog\/wp-content\/uploads\/2026\/01\/IMG_6682-472x1024.png\" alt=\"IMG 6682 472x1024\" class=\"wp-image-269\" title=\"Building a Custom English Learning App with FileMaker, Node-RED, and ChatGPT (API + JSON)\" srcset=\"https:\/\/www.genexio.net\/blog\/wp-content\/uploads\/2026\/01\/IMG_6682-472x1024.png 472w, https:\/\/www.genexio.net\/blog\/wp-content\/uploads\/2026\/01\/IMG_6682-138x300.png 138w, https:\/\/www.genexio.net\/blog\/wp-content\/uploads\/2026\/01\/IMG_6682-768x1665.png 768w, https:\/\/www.genexio.net\/blog\/wp-content\/uploads\/2026\/01\/IMG_6682-709x1536.png 709w, https:\/\/www.genexio.net\/blog\/wp-content\/uploads\/2026\/01\/IMG_6682-945x2048.png 945w, https:\/\/www.genexio.net\/blog\/wp-content\/uploads\/2026\/01\/IMG_6682-scaled.png 1181w\" sizes=\"auto, (max-width: 472px) 100vw, 472px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"472\" height=\"1024\" data-id=\"268\" src=\"https:\/\/www.genexio.net\/blog\/wp-content\/uploads\/2026\/01\/IMG_6681-472x1024.png\" alt=\"IMG 6681 472x1024\" class=\"wp-image-268\" title=\"Building a Custom English Learning App with FileMaker, Node-RED, and ChatGPT (API + JSON)\" srcset=\"https:\/\/www.genexio.net\/blog\/wp-content\/uploads\/2026\/01\/IMG_6681-472x1024.png 472w, https:\/\/www.genexio.net\/blog\/wp-content\/uploads\/2026\/01\/IMG_6681-138x300.png 138w, https:\/\/www.genexio.net\/blog\/wp-content\/uploads\/2026\/01\/IMG_6681-768x1665.png 768w, https:\/\/www.genexio.net\/blog\/wp-content\/uploads\/2026\/01\/IMG_6681-709x1536.png 709w, https:\/\/www.genexio.net\/blog\/wp-content\/uploads\/2026\/01\/IMG_6681-945x2048.png 945w, https:\/\/www.genexio.net\/blog\/wp-content\/uploads\/2026\/01\/IMG_6681-scaled.png 1181w\" sizes=\"auto, (max-width: 472px) 100vw, 472px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"472\" height=\"1024\" data-id=\"272\" src=\"https:\/\/www.genexio.net\/blog\/wp-content\/uploads\/2026\/01\/IMG_6680-472x1024.png\" alt=\"IMG 6680 472x1024\" class=\"wp-image-272\" title=\"Building a Custom English Learning App with FileMaker, Node-RED, and ChatGPT (API + JSON)\" srcset=\"https:\/\/www.genexio.net\/blog\/wp-content\/uploads\/2026\/01\/IMG_6680-472x1024.png 472w, https:\/\/www.genexio.net\/blog\/wp-content\/uploads\/2026\/01\/IMG_6680-138x300.png 138w, https:\/\/www.genexio.net\/blog\/wp-content\/uploads\/2026\/01\/IMG_6680-768x1665.png 768w, https:\/\/www.genexio.net\/blog\/wp-content\/uploads\/2026\/01\/IMG_6680-709x1536.png 709w, https:\/\/www.genexio.net\/blog\/wp-content\/uploads\/2026\/01\/IMG_6680-945x2048.png 945w, https:\/\/www.genexio.net\/blog\/wp-content\/uploads\/2026\/01\/IMG_6680-scaled.png 1181w\" sizes=\"auto, (max-width: 472px) 100vw, 472px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"472\" height=\"1024\" data-id=\"274\" src=\"https:\/\/www.genexio.net\/blog\/wp-content\/uploads\/2026\/01\/IMG_6679-472x1024.png\" alt=\"IMG 6679 472x1024\" class=\"wp-image-274\" title=\"Building a Custom English Learning App with FileMaker, Node-RED, and ChatGPT (API + JSON)\" srcset=\"https:\/\/www.genexio.net\/blog\/wp-content\/uploads\/2026\/01\/IMG_6679-472x1024.png 472w, https:\/\/www.genexio.net\/blog\/wp-content\/uploads\/2026\/01\/IMG_6679-138x300.png 138w, https:\/\/www.genexio.net\/blog\/wp-content\/uploads\/2026\/01\/IMG_6679-768x1665.png 768w, https:\/\/www.genexio.net\/blog\/wp-content\/uploads\/2026\/01\/IMG_6679-709x1536.png 709w, https:\/\/www.genexio.net\/blog\/wp-content\/uploads\/2026\/01\/IMG_6679-945x2048.png 945w, https:\/\/www.genexio.net\/blog\/wp-content\/uploads\/2026\/01\/IMG_6679-scaled.png 1181w\" sizes=\"auto, (max-width: 472px) 100vw, 472px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"472\" height=\"1024\" data-id=\"273\" src=\"https:\/\/www.genexio.net\/blog\/wp-content\/uploads\/2026\/01\/IMG_6678-472x1024.png\" alt=\"IMG 6678 472x1024\" class=\"wp-image-273\" title=\"Building a Custom English Learning App with FileMaker, Node-RED, and ChatGPT (API + JSON)\" srcset=\"https:\/\/www.genexio.net\/blog\/wp-content\/uploads\/2026\/01\/IMG_6678-472x1024.png 472w, https:\/\/www.genexio.net\/blog\/wp-content\/uploads\/2026\/01\/IMG_6678-138x300.png 138w, https:\/\/www.genexio.net\/blog\/wp-content\/uploads\/2026\/01\/IMG_6678-768x1665.png 768w, https:\/\/www.genexio.net\/blog\/wp-content\/uploads\/2026\/01\/IMG_6678-709x1536.png 709w, https:\/\/www.genexio.net\/blog\/wp-content\/uploads\/2026\/01\/IMG_6678-945x2048.png 945w, https:\/\/www.genexio.net\/blog\/wp-content\/uploads\/2026\/01\/IMG_6678-scaled.png 1181w\" sizes=\"auto, (max-width: 472px) 100vw, 472px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"472\" height=\"1024\" data-id=\"270\" src=\"https:\/\/www.genexio.net\/blog\/wp-content\/uploads\/2026\/01\/IMG_6677-472x1024.png\" alt=\"IMG 6677 472x1024\" class=\"wp-image-270\" title=\"Building a Custom English Learning App with FileMaker, Node-RED, and ChatGPT (API + JSON)\" srcset=\"https:\/\/www.genexio.net\/blog\/wp-content\/uploads\/2026\/01\/IMG_6677-472x1024.png 472w, https:\/\/www.genexio.net\/blog\/wp-content\/uploads\/2026\/01\/IMG_6677-138x300.png 138w, https:\/\/www.genexio.net\/blog\/wp-content\/uploads\/2026\/01\/IMG_6677-768x1665.png 768w, https:\/\/www.genexio.net\/blog\/wp-content\/uploads\/2026\/01\/IMG_6677-709x1536.png 709w, https:\/\/www.genexio.net\/blog\/wp-content\/uploads\/2026\/01\/IMG_6677-945x2048.png 945w, https:\/\/www.genexio.net\/blog\/wp-content\/uploads\/2026\/01\/IMG_6677-scaled.png 1181w\" sizes=\"auto, (max-width: 472px) 100vw, 472px\" \/><\/figure>\n<\/figure>\n","protected":false},"excerpt":{"rendered":"<p>Note: there are many great apps to learn English. I wanted something different: a custom system built for me, with a clear logic and structured [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[17,5,15,16],"tags":[],"class_list":["post-267","post","type-post","status-publish","format-standard","hentry","category-ai","category-filemaker","category-node-red","category-python"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.2 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Building a Custom English Learning App with FileMaker, Node-RED, and ChatGPT (API + JSON) - My blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.genexio.net\/blog\/2026\/01\/05\/building-a-custom-english-learning-app-with-filemaker-node-red-and-chatgpt-api-json\/\" \/>\n<meta property=\"og:locale\" content=\"en_GB\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Building a Custom English Learning App with FileMaker, Node-RED, and ChatGPT (API + JSON) - My blog\" \/>\n<meta property=\"og:description\" content=\"Note: there are many great apps to learn English. I wanted something different: a custom system built for me, with a clear logic and structured [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.genexio.net\/blog\/2026\/01\/05\/building-a-custom-english-learning-app-with-filemaker-node-red-and-chatgpt-api-json\/\" \/>\n<meta property=\"og:site_name\" content=\"My blog\" \/>\n<meta property=\"article:published_time\" content=\"2026-01-05T22:56:18+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-01-21T06:48:37+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.genexio.net\/blog\/wp-content\/uploads\/2026\/01\/IMG_6683-scaled.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1181\" \/>\n\t<meta property=\"og:image:height\" content=\"2560\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"genexio\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"genexio\" \/>\n\t<meta name=\"twitter:label2\" content=\"Estimated reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.genexio.net\/blog\/2026\/01\/05\/building-a-custom-english-learning-app-with-filemaker-node-red-and-chatgpt-api-json\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.genexio.net\/blog\/2026\/01\/05\/building-a-custom-english-learning-app-with-filemaker-node-red-and-chatgpt-api-json\/\"},\"author\":{\"name\":\"genexio\",\"@id\":\"https:\/\/www.genexio.net\/blog\/#\/schema\/person\/e293425f2302a3a32a049864bf8cd02a\"},\"headline\":\"Building a Custom English Learning App with FileMaker, Node-RED, and ChatGPT (API + JSON)\",\"datePublished\":\"2026-01-05T22:56:18+00:00\",\"dateModified\":\"2026-01-21T06:48:37+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.genexio.net\/blog\/2026\/01\/05\/building-a-custom-english-learning-app-with-filemaker-node-red-and-chatgpt-api-json\/\"},\"wordCount\":915,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.genexio.net\/blog\/#\/schema\/person\/e293425f2302a3a32a049864bf8cd02a\"},\"image\":{\"@id\":\"https:\/\/www.genexio.net\/blog\/2026\/01\/05\/building-a-custom-english-learning-app-with-filemaker-node-red-and-chatgpt-api-json\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.genexio.net\/blog\/wp-content\/uploads\/2026\/01\/IMG_6683-472x1024.png\",\"articleSection\":[\"AI\",\"filemaker\",\"node-red\",\"python\"],\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.genexio.net\/blog\/2026\/01\/05\/building-a-custom-english-learning-app-with-filemaker-node-red-and-chatgpt-api-json\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.genexio.net\/blog\/2026\/01\/05\/building-a-custom-english-learning-app-with-filemaker-node-red-and-chatgpt-api-json\/\",\"url\":\"https:\/\/www.genexio.net\/blog\/2026\/01\/05\/building-a-custom-english-learning-app-with-filemaker-node-red-and-chatgpt-api-json\/\",\"name\":\"Building a Custom English Learning App with FileMaker, Node-RED, and ChatGPT (API + JSON) - My blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.genexio.net\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.genexio.net\/blog\/2026\/01\/05\/building-a-custom-english-learning-app-with-filemaker-node-red-and-chatgpt-api-json\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.genexio.net\/blog\/2026\/01\/05\/building-a-custom-english-learning-app-with-filemaker-node-red-and-chatgpt-api-json\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.genexio.net\/blog\/wp-content\/uploads\/2026\/01\/IMG_6683-472x1024.png\",\"datePublished\":\"2026-01-05T22:56:18+00:00\",\"dateModified\":\"2026-01-21T06:48:37+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.genexio.net\/blog\/2026\/01\/05\/building-a-custom-english-learning-app-with-filemaker-node-red-and-chatgpt-api-json\/#breadcrumb\"},\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.genexio.net\/blog\/2026\/01\/05\/building-a-custom-english-learning-app-with-filemaker-node-red-and-chatgpt-api-json\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\/\/www.genexio.net\/blog\/2026\/01\/05\/building-a-custom-english-learning-app-with-filemaker-node-red-and-chatgpt-api-json\/#primaryimage\",\"url\":\"https:\/\/www.genexio.net\/blog\/wp-content\/uploads\/2026\/01\/IMG_6683-scaled.png\",\"contentUrl\":\"https:\/\/www.genexio.net\/blog\/wp-content\/uploads\/2026\/01\/IMG_6683-scaled.png\",\"width\":1181,\"height\":2560},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.genexio.net\/blog\/2026\/01\/05\/building-a-custom-english-learning-app-with-filemaker-node-red-and-chatgpt-api-json\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.genexio.net\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Building a Custom English Learning App with FileMaker, Node-RED, and ChatGPT (API + JSON)\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.genexio.net\/blog\/#website\",\"url\":\"https:\/\/www.genexio.net\/blog\/\",\"name\":\"My blog\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/www.genexio.net\/blog\/#\/schema\/person\/e293425f2302a3a32a049864bf8cd02a\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.genexio.net\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-GB\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/www.genexio.net\/blog\/#\/schema\/person\/e293425f2302a3a32a049864bf8cd02a\",\"name\":\"genexio\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\/\/secure.gravatar.com\/avatar\/7eda1948b0cb52048b0ce1e60c0e9be821f2ad85632d822bd60187a9793428a6?s=96&d=mm&r=g\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/7eda1948b0cb52048b0ce1e60c0e9be821f2ad85632d822bd60187a9793428a6?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/7eda1948b0cb52048b0ce1e60c0e9be821f2ad85632d822bd60187a9793428a6?s=96&d=mm&r=g\",\"caption\":\"genexio\"},\"logo\":{\"@id\":\"https:\/\/secure.gravatar.com\/avatar\/7eda1948b0cb52048b0ce1e60c0e9be821f2ad85632d822bd60187a9793428a6?s=96&d=mm&r=g\"},\"sameAs\":[\"http:\/\/www.genexio.net\/blog\"],\"url\":\"https:\/\/www.genexio.net\/blog\/author\/genexio\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Building a Custom English Learning App with FileMaker, Node-RED, and ChatGPT (API + JSON) - My blog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.genexio.net\/blog\/2026\/01\/05\/building-a-custom-english-learning-app-with-filemaker-node-red-and-chatgpt-api-json\/","og_locale":"en_GB","og_type":"article","og_title":"Building a Custom English Learning App with FileMaker, Node-RED, and ChatGPT (API + JSON) - My blog","og_description":"Note: there are many great apps to learn English. I wanted something different: a custom system built for me, with a clear logic and structured [&hellip;]","og_url":"https:\/\/www.genexio.net\/blog\/2026\/01\/05\/building-a-custom-english-learning-app-with-filemaker-node-red-and-chatgpt-api-json\/","og_site_name":"My blog","article_published_time":"2026-01-05T22:56:18+00:00","article_modified_time":"2026-01-21T06:48:37+00:00","og_image":[{"width":1181,"height":2560,"url":"https:\/\/www.genexio.net\/blog\/wp-content\/uploads\/2026\/01\/IMG_6683-scaled.png","type":"image\/png"}],"author":"genexio","twitter_card":"summary_large_image","twitter_misc":{"Written by":"genexio","Estimated reading time":"8 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.genexio.net\/blog\/2026\/01\/05\/building-a-custom-english-learning-app-with-filemaker-node-red-and-chatgpt-api-json\/#article","isPartOf":{"@id":"https:\/\/www.genexio.net\/blog\/2026\/01\/05\/building-a-custom-english-learning-app-with-filemaker-node-red-and-chatgpt-api-json\/"},"author":{"name":"genexio","@id":"https:\/\/www.genexio.net\/blog\/#\/schema\/person\/e293425f2302a3a32a049864bf8cd02a"},"headline":"Building a Custom English Learning App with FileMaker, Node-RED, and ChatGPT (API + JSON)","datePublished":"2026-01-05T22:56:18+00:00","dateModified":"2026-01-21T06:48:37+00:00","mainEntityOfPage":{"@id":"https:\/\/www.genexio.net\/blog\/2026\/01\/05\/building-a-custom-english-learning-app-with-filemaker-node-red-and-chatgpt-api-json\/"},"wordCount":915,"commentCount":0,"publisher":{"@id":"https:\/\/www.genexio.net\/blog\/#\/schema\/person\/e293425f2302a3a32a049864bf8cd02a"},"image":{"@id":"https:\/\/www.genexio.net\/blog\/2026\/01\/05\/building-a-custom-english-learning-app-with-filemaker-node-red-and-chatgpt-api-json\/#primaryimage"},"thumbnailUrl":"https:\/\/www.genexio.net\/blog\/wp-content\/uploads\/2026\/01\/IMG_6683-472x1024.png","articleSection":["AI","filemaker","node-red","python"],"inLanguage":"en-GB","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.genexio.net\/blog\/2026\/01\/05\/building-a-custom-english-learning-app-with-filemaker-node-red-and-chatgpt-api-json\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.genexio.net\/blog\/2026\/01\/05\/building-a-custom-english-learning-app-with-filemaker-node-red-and-chatgpt-api-json\/","url":"https:\/\/www.genexio.net\/blog\/2026\/01\/05\/building-a-custom-english-learning-app-with-filemaker-node-red-and-chatgpt-api-json\/","name":"Building a Custom English Learning App with FileMaker, Node-RED, and ChatGPT (API + JSON) - My blog","isPartOf":{"@id":"https:\/\/www.genexio.net\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.genexio.net\/blog\/2026\/01\/05\/building-a-custom-english-learning-app-with-filemaker-node-red-and-chatgpt-api-json\/#primaryimage"},"image":{"@id":"https:\/\/www.genexio.net\/blog\/2026\/01\/05\/building-a-custom-english-learning-app-with-filemaker-node-red-and-chatgpt-api-json\/#primaryimage"},"thumbnailUrl":"https:\/\/www.genexio.net\/blog\/wp-content\/uploads\/2026\/01\/IMG_6683-472x1024.png","datePublished":"2026-01-05T22:56:18+00:00","dateModified":"2026-01-21T06:48:37+00:00","breadcrumb":{"@id":"https:\/\/www.genexio.net\/blog\/2026\/01\/05\/building-a-custom-english-learning-app-with-filemaker-node-red-and-chatgpt-api-json\/#breadcrumb"},"inLanguage":"en-GB","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.genexio.net\/blog\/2026\/01\/05\/building-a-custom-english-learning-app-with-filemaker-node-red-and-chatgpt-api-json\/"]}]},{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/www.genexio.net\/blog\/2026\/01\/05\/building-a-custom-english-learning-app-with-filemaker-node-red-and-chatgpt-api-json\/#primaryimage","url":"https:\/\/www.genexio.net\/blog\/wp-content\/uploads\/2026\/01\/IMG_6683-scaled.png","contentUrl":"https:\/\/www.genexio.net\/blog\/wp-content\/uploads\/2026\/01\/IMG_6683-scaled.png","width":1181,"height":2560},{"@type":"BreadcrumbList","@id":"https:\/\/www.genexio.net\/blog\/2026\/01\/05\/building-a-custom-english-learning-app-with-filemaker-node-red-and-chatgpt-api-json\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.genexio.net\/blog\/"},{"@type":"ListItem","position":2,"name":"Building a Custom English Learning App with FileMaker, Node-RED, and ChatGPT (API + JSON)"}]},{"@type":"WebSite","@id":"https:\/\/www.genexio.net\/blog\/#website","url":"https:\/\/www.genexio.net\/blog\/","name":"My blog","description":"","publisher":{"@id":"https:\/\/www.genexio.net\/blog\/#\/schema\/person\/e293425f2302a3a32a049864bf8cd02a"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.genexio.net\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-GB"},{"@type":["Person","Organization"],"@id":"https:\/\/www.genexio.net\/blog\/#\/schema\/person\/e293425f2302a3a32a049864bf8cd02a","name":"genexio","image":{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/secure.gravatar.com\/avatar\/7eda1948b0cb52048b0ce1e60c0e9be821f2ad85632d822bd60187a9793428a6?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/7eda1948b0cb52048b0ce1e60c0e9be821f2ad85632d822bd60187a9793428a6?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/7eda1948b0cb52048b0ce1e60c0e9be821f2ad85632d822bd60187a9793428a6?s=96&d=mm&r=g","caption":"genexio"},"logo":{"@id":"https:\/\/secure.gravatar.com\/avatar\/7eda1948b0cb52048b0ce1e60c0e9be821f2ad85632d822bd60187a9793428a6?s=96&d=mm&r=g"},"sameAs":["http:\/\/www.genexio.net\/blog"],"url":"https:\/\/www.genexio.net\/blog\/author\/genexio\/"}]}},"_links":{"self":[{"href":"https:\/\/www.genexio.net\/blog\/wp-json\/wp\/v2\/posts\/267","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.genexio.net\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.genexio.net\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.genexio.net\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.genexio.net\/blog\/wp-json\/wp\/v2\/comments?post=267"}],"version-history":[{"count":1,"href":"https:\/\/www.genexio.net\/blog\/wp-json\/wp\/v2\/posts\/267\/revisions"}],"predecessor-version":[{"id":275,"href":"https:\/\/www.genexio.net\/blog\/wp-json\/wp\/v2\/posts\/267\/revisions\/275"}],"wp:attachment":[{"href":"https:\/\/www.genexio.net\/blog\/wp-json\/wp\/v2\/media?parent=267"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.genexio.net\/blog\/wp-json\/wp\/v2\/categories?post=267"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.genexio.net\/blog\/wp-json\/wp\/v2\/tags?post=267"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}