{"id":12263,"date":"2025-11-07T14:51:35","date_gmt":"2025-11-07T05:51:35","guid":{"rendered":"https:\/\/sreake.com\/?p=12263"},"modified":"2026-02-10T16:15:09","modified_gmt":"2026-02-10T07:15:09","slug":"feature-based-directory-structure-good-practice-2","status":"publish","type":"post","link":"https:\/\/sreake.com\/en\/blog\/feature-based-directory-structure-good-practice-2\/","title":{"rendered":"Best Practices for Structuring your Projects &#8211; 2. Feature Based Structure"},"content":{"rendered":"\n<p><em>This blog post is a translation of&nbsp;<a href=\"https:\/\/sreake.com\/blog\/feature-based-directory-structure-good-practice\/\">a Japanese article<\/a>&nbsp;posted on May 28th, 2025.<\/em><\/p>\n\n\n\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_75 counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Table of Contents<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/sreake.com\/en\/blog\/feature-based-directory-structure-good-practice-2\/#Introduction\" >Introduction<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/sreake.com\/en\/blog\/feature-based-directory-structure-good-practice-2\/#Structural_Policy\" >Structural Policy<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/sreake.com\/en\/blog\/feature-based-directory-structure-good-practice-2\/#Criteria_for_Separating_Features\" >Criteria for Separating Features<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/sreake.com\/en\/blog\/feature-based-directory-structure-good-practice-2\/#Example_Directory_Structure\" >Example Directory Structure<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/sreake.com\/en\/blog\/feature-based-directory-structure-good-practice-2\/#Frontend\" >Frontend<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/sreake.com\/en\/blog\/feature-based-directory-structure-good-practice-2\/#Assembling_the_UI_Example_with_a_single_feature\" >Assembling the UI (Example with a single feature)<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/sreake.com\/en\/blog\/feature-based-directory-structure-good-practice-2\/#Assembling_the_UI_Example_with_multiple_features\" >Assembling the UI (Example with multiple features)<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/sreake.com\/en\/blog\/feature-based-directory-structure-good-practice-2\/#Backend\" >Backend<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/sreake.com\/en\/blog\/feature-based-directory-structure-good-practice-2\/#Assembling_the_API_Example_with_a_single_feature\" >Assembling the API (Example with a single feature)<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/sreake.com\/en\/blog\/feature-based-directory-structure-good-practice-2\/#Assembling_the_API_Example_with_multiple_features\" >Assembling the API (Example with multiple features)<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/sreake.com\/en\/blog\/feature-based-directory-structure-good-practice-2\/#Example_of_combining_routes\" >Example of combining routes<\/a><\/li><\/ul><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-12\" href=\"https:\/\/sreake.com\/en\/blog\/feature-based-directory-structure-good-practice-2\/#Conclusion\" >Conclusion<\/a><\/li><\/ul><\/nav><\/div>\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Introduction\"><\/span>Introduction<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>In application development, <strong>directory structure is a design element that directly impacts maintainability, scalability, and development efficiency.<\/strong><\/p>\n\n\n\n<p>This article introduces a <strong>feature-based structure that is easy to organize by function and robust against expansion<\/strong>, aimed at teams struggling with the following issues:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Files become scattered and hard to manage as the project grows<\/li><li>New members get lost, wondering where everything is<\/li><li>A directory structure that started small tends to break down as it grows<\/li><\/ul>\n\n\n\n<div class=\"wp-block-group has-gray-200-background-color has-background is-vertical is-layout-flex wp-container-core-group-is-layout-8cf370e7 wp-block-group-is-layout-flex\">\n<p>\u26a0\ufe0f <strong>This structure is not the only correct one!<\/strong><\/p>\n\n\n\n<p class=\"has-text-align-left\">This article is just one example of a structural pattern that I have found to be relatively easy to handle, based on my experience in actual projects and team development.<br><strong>Please customize and adapt the structure as appropriate<\/strong> based on your team&#8217;s size, technical level, and the nature of the project.<\/p>\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Structural_Policy\"><\/span>Structural Policy<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Separate directories by feature.<\/strong><\/li><li>Organize responsibilities within each feature by file (e.g., <code>components.tsx<\/code>, <code>usecases.ts<\/code>).<\/li><li><strong>Compose logic that combines multiple features (screen UI \/ responses) on the outside.<\/strong><\/li><li>Place common logic in <code>shared\/<\/code> and the application foundation in <code>core\/<\/code>.<\/li><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Criteria_for_Separating_Features\"><\/span>Criteria for Separating Features<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>&#8220;What constitutes a single feature&#8221; significantly impacts the overall clarity and maintainability of the structure. Let&#8217;s design based on criteria like the following:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th><strong>Classification Criteria<\/strong><\/th><th><strong>Details<\/strong><\/th><\/tr><\/thead><tbody><tr><td><strong>By Business Domain<\/strong><\/td><td>Ex: <code>user<\/code>, <code>product<\/code>, <code>order<\/code>, <code>dashboard<\/code><\/td><\/tr><tr><td><strong>By Screen<\/strong><\/td><td>A single screen with clear responsibilities (Ex: <code>Login<\/code>, <code>Profile<\/code>, <code>Settings<\/code>)<\/td><\/tr><tr><td><strong>By API<\/strong><\/td><td>Aligned with the REST\/GraphQL endpoint structure<\/td><\/tr><tr><td><strong>By Change Frequency \/ Team<\/strong><\/td><td>Also effective for features that are frequently modified or when separating by the responsible team<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<div class=\"wp-block-group has-gray-100-background-color has-background is-vertical is-layout-flex wp-container-core-group-is-layout-8cf370e7 wp-block-group-is-layout-flex\">\n<p>\ud83d\udca1 The basic idea is to group the &#8220;screens, logic, and state that complete a single function&#8221; together.<\/p>\n\n\n\n<p>If the boundaries are ambiguous, it&#8217;s realistic to start with broader divisions and split or merge them as needed.<\/p>\n<\/div>\n\n\n\n<p><strong>Specific Examples<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Initially, group <code>login<\/code>, <code>signup<\/code>, and <code>forgotPassword<\/code> into <code>auth\/<\/code>.<ul><li>\u2192 This makes it easier to manage auth-related UI, APIs, and state management collectively.<\/li><\/ul><\/li><li>User-related functions like <code>user<\/code>, <code>profile<\/code>, and <code>settings<\/code>&#8230;<ul><li>\u2192 Can be placed under <code>user\/<\/code> at first.<\/li><li>\u2192 It&#8217;s also fine to split them out into independent <code>profile\/<\/code> or <code>settings\/<\/code> directories later.<\/li><\/ul><\/li><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Example_Directory_Structure\"><\/span>Example Directory Structure<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Frontend\"><\/span>Frontend<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<pre class=\"wp-block-code code-block\"><code>src\/\n\u251c\u2500\u2500 features\/               \/\/ Grouped by feature (UI, logic, state)\n\u2502   \u251c\u2500\u2500 user\/\n\u2502   \u2502   \u251c\u2500\u2500 components.tsx      \/\/ UI components specific to the user feature\n\u2502   \u2502   \u251c\u2500\u2500 hooks.ts            \/\/ Custom hooks\n\u2502   \u2502   \u251c\u2500\u2500 usecases.ts         \/\/ Usecases (operations called from UI)\n\u2502   \u2502   \u251c\u2500\u2500 repository.ts       \/\/ Data fetching logic (API, localStorage, etc.)\n\u2502   \u2502   \u2514\u2500\u2500 store.ts            \/\/ State management (Zustand, Redux, etc.)\n\u2502   \u251c\u2500\u2500 product\/\n\u2502   \u2514\u2500\u2500 order\/\n\u2502\n\u251c\u2500\u2500 pages\/                  \/\/ Construct screens by combining multiple features\n\u2502   \u251c\u2500\u2500 dashboard.tsx\n\u2502   \u2514\u2500\u2500 user.tsx\n\u2502\n\u251c\u2500\u2500 shared\/                 \/\/ Reusable UI \/ utilities\n\u2502   \u251c\u2500\u2500 components.tsx      \/\/ Common UI (Button, Modal, etc.)\n\u2502   \u251c\u2500\u2500 utils.ts            \/\/ General-purpose functions (pure functions)\n\u2502   \u251c\u2500\u2500 constants.ts        \/\/ Constants\n\u2502   \u2514\u2500\u2500 types.ts            \/\/ Common types\n\u2502\n\u251c\u2500\u2500 core\/                   \/\/ App-wide foundational features\n\u2502   \u251c\u2500\u2500 api.ts              \/\/ API client settings (axios, etc.)\n\u2502   \u251c\u2500\u2500 auth.ts             \/\/ Authentication-related logic\n\u2502   \u251c\u2500\u2500 config.ts           \/\/ Environment settings\n\u2502   \u2514\u2500\u2500 store.ts            \/\/ Global store initialization\n\u2502\n\u2514\u2500\u2500 main.tsx                \/\/ Entry point\n<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\"><li>Define <strong>feature-specific UI<\/strong> in each feature&#8217;s <code>components.tsx<\/code>.<\/li><li>Write state management and API logic in <code>store.ts<\/code> \/ <code>hooks.ts<\/code> \/ <code>usecases.ts<\/code>.<\/li><li><strong>Freely combine these in <code>pages\/<\/code> to build screens.<\/strong><\/li><\/ul>\n\n\n\n<div class=\"wp-block-group has-gray-200-background-color has-background is-vertical is-content-justification-left is-layout-flex wp-container-core-group-is-layout-adc7e0b5 wp-block-group-is-layout-flex\">\n<p>\ud83d\udca1 <strong>Key Design Points<\/strong><\/p>\n\n\n\n<p>\u2192 Keep <strong>state, logic, and UI self-contained<\/strong> within <code>features\/*<\/code>.<\/p>\n\n\n\n<p>\u2192 <strong>Combine multiple features<\/strong> in <code>pages\/<\/code> to build screen UI.<\/p>\n\n\n\n<p>\u2192 Be mindful of DRY by extracting <strong>common components, constants, and types<\/strong> into <code>shared\/<\/code>.<\/p>\n\n\n\n<p>\u2192 Consolidate app-wide settings and state management in <code>core\/<\/code>.<\/p>\n<\/div>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Assembling_the_UI_Example_with_a_single_feature\"><\/span>Assembling the UI (Example with a single feature)<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<pre class=\"wp-block-code code-block\"><code>\/\/ pages\/user.tsx\nimport { UserList } from '@\/features\/user\/components';\nimport { useUser } from '@\/features\/user\/hooks';\n\nexport const UserPage = () =&gt; {\n  const { users } = useUser();\n  return &lt;UserList users={users} \/&gt;;\n};\n<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Assembling_the_UI_Example_with_multiple_features\"><\/span>Assembling the UI (Example with multiple features)<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<pre class=\"wp-block-code code-block\"><code>\/\/ pages\/dashboard.tsx\nimport { UserCard } from '@\/features\/user\/components';\nimport { ProductCard } from '@\/features\/product\/components';\nimport { useUser } from '@\/features\/user\/hooks';\nimport { useProduct } from '@\/features\/product\/hooks';\n\nexport const Dashboard = () =&gt; {\n  const { currentUser } = useUser();\n  const { featuredProduct } = useProduct();\n\n  return (\n    &lt;&gt;\n      &lt;UserCard name={currentUser.name} \/&gt;\n      &lt;ProductCard product={featuredProduct} \/&gt;\n    &lt;\/&gt;\n  );\n};\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Backend\"><\/span>Backend<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<pre class=\"wp-block-code code-block\"><code>src\/\n\u251c\u2500\u2500 features\/               \/\/ Domain logic for each feature\n\u2502   \u251c\u2500\u2500 user\/\n\u2502   \u2502   \u251c\u2500\u2500 usecases.ts       \/\/ Usecases (application service layer)\n\u2502   \u2502   \u251c\u2500\u2500 repository.ts       \/\/ DB or external API access\n\u2502   \u2502   \u2514\u2500\u2500 types.ts            \/\/ Type definitions\n\u2502   \u251c\u2500\u2500 product\/\n\u2502   \u2514\u2500\u2500 order\/\n\u2502\n\u251c\u2500\u2500 routes\/                 \/\/ Routing by endpoint (response composition)\n\u2502   \u251c\u2500\u2500 user\/route.ts       \/\/ \/api\/users\n\u2502   \u2514\u2500\u2500 dashboard\/route.ts  \/\/ \/api\/dashboard (combines multiple features)\n\u2502\n\u251c\u2500\u2500 shared\/                 \/\/ Common types, constants, functions\n\u2502   \u251c\u2500\u2500 utils.ts\n\u2502   \u251c\u2500\u2500 constants.ts\n\u2502   \u2514\u2500\u2500 types.ts\n\u2502\n\u251c\u2500\u2500 core\/                   \/\/ App-wide initialization &amp; common logic\n\u2502   \u251c\u2500\u2500 config.ts\n\u2502   \u251c\u2500\u2500 database.ts\n\u2502   \u251c\u2500\u2500 auth.ts\n\u2502   \u2514\u2500\u2500 errorHandler.ts\n\u2502\n\u2514\u2500\u2500 main.ts                 \/\/ Entry point\n<\/code><\/pre>\n\n\n\n<div class=\"wp-block-group has-gray-200-background-color has-background is-vertical is-layout-flex wp-container-core-group-is-layout-8cf370e7 wp-block-group-is-layout-flex\">\n<p>\ud83d\udca1 <strong>Key Design Points<\/strong><\/p>\n\n\n\n<p>\u2192 <code>features\/*<\/code> should <strong>focus on logic and data fetching<\/strong> (services, DB).<\/p>\n\n\n\n<p>\u2192 Consolidate endpoint handling in <code>routes\/*\/route.ts<\/code>.<\/p>\n\n\n\n<p>\u2192 Design flexibly by combining return values so that <strong>response structures can be freely composed<\/strong>.<\/p>\n\n\n\n<p>\u2192 Explicitly mount all routes in <code>main.ts<\/code> to centralize the app&#8217;s starting point.<\/p>\n<\/div>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Assembling_the_API_Example_with_a_single_feature\"><\/span>Assembling the API (Example with a single feature)<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<pre class=\"wp-block-code code-block\"><code>\/\/ routes\/user\/route.ts\nimport { Router } from 'express';\nimport { getUserById } from '@\/features\/user\/usecase';\n\nconst router = Router();\n\nrouter.get('\/:userId', async (req, res) =&gt; {\n  const user = await getUserById(req.params.userId);\n  res.json(user);\n});\n\nexport default router;\n<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Assembling_the_API_Example_with_multiple_features\"><\/span>Assembling the API (Example with multiple features)<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<pre class=\"wp-block-code code-block\"><code>\/\/ routes\/dashboard\/route.ts\nimport { Router } from 'express';\nimport { getUserById } from '@\/features\/user\/usecase';\nimport { getOrdersByUserId } from '@\/features\/order\/usecase';\nimport { getProductsByIds } from '@\/features\/product\/usecase';\n\nconst router = Router();\n\nrouter.get('\/:userId', async (req, res) =&gt; {\n  const userId = req.params.userId;\n\n  const user = await getUserById(userId);\n  const orders = await getOrdersByUserId(userId);\n  const productIds = orders.flatMap((o) =&gt; o.productIds);\n  const products = await getProductsByIds(productIds);\n\n  res.json({\n    user: {\n      name: user.name,\n      email: user.email,\n    },\n    orderSummary: {\n      count: orders.length,\n      products,\n    },\n  });\n});\n\nexport default router;\n<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Example_of_combining_routes\"><\/span>Example of combining routes<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<pre class=\"wp-block-code code-block\"><code>\/\/ main.ts\nimport express from 'express';\nimport dashboardRoute from '.\/routes\/dashboard\/route';\nimport userRoute from '.\/routes\/user\/route';\n\nconst app = express();\napp.use(express.json());\n\napp.use('\/api\/dashboard', dashboardRoute);\napp.use('\/api\/users', userRoute);\n\napp.listen(3000, () =&gt; {\n  console.log('Server is running on &lt;http:\/\/localhost:3000&gt;');\n});\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Conclusion\"><\/span>Conclusion<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>This structure is a good fit for the following development styles:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Teams where multiple people or features are developed in parallel.<\/li><li>Projects that want to start small and add features incrementally.<\/li><li>Workplaces that want a design that separates responsibilities by feature, making it easy to change and maintain.<\/li><\/ul>\n\n\n\n<div class=\"wp-block-group has-gray-200-background-color has-background is-vertical is-layout-flex wp-container-core-group-is-layout-8cf370e7 wp-block-group-is-layout-flex\">\n<p>A structure isn&#8217;t something you decide on once and are done with; it&#8217;s something you keep iterating on.<\/p>\n\n\n\n<p>You should continue reviewing your structure as the team grows and the project changes.<\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Hello from the Sreake team! Learn what a feature-based directory structure is, and how you can use it in your own project.<\/p>\n","protected":false},"author":45,"featured_media":12268,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_locale":"en_US","_original_post":"https:\/\/sreake.com\/?p=11133","footnotes":""},"categories":[17],"tags":[23],"class_list":["post-12263","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blog","tag-enginner-blog","en-US"],"acf":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/sreake.com\/wp-json\/wp\/v2\/posts\/12263","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sreake.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sreake.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sreake.com\/wp-json\/wp\/v2\/users\/45"}],"replies":[{"embeddable":true,"href":"https:\/\/sreake.com\/wp-json\/wp\/v2\/comments?post=12263"}],"version-history":[{"count":1,"href":"https:\/\/sreake.com\/wp-json\/wp\/v2\/posts\/12263\/revisions"}],"predecessor-version":[{"id":13502,"href":"https:\/\/sreake.com\/wp-json\/wp\/v2\/posts\/12263\/revisions\/13502"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/sreake.com\/wp-json\/wp\/v2\/media\/12268"}],"wp:attachment":[{"href":"https:\/\/sreake.com\/wp-json\/wp\/v2\/media?parent=12263"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sreake.com\/wp-json\/wp\/v2\/categories?post=12263"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sreake.com\/wp-json\/wp\/v2\/tags?post=12263"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}