diff --git a/apps/i18n-test/langnostic.config.ts b/apps/i18n-test/langnostic.config.ts
index 8bdda0561..38c3275ae 100644
--- a/apps/i18n-test/langnostic.config.ts
+++ b/apps/i18n-test/langnostic.config.ts
@@ -29,5 +29,15 @@ export default {
},
],
},
+ {
+ name: 'questions',
+ plugin: 'mdx',
+ paths: [
+ {
+ source: './src/questions/*/writeups/en-US/**/*.mdx',
+ target: './src/questions/*/writeups/{locale}/**/*.mdx',
+ },
+ ],
+ },
],
} satisfies ConfigType;
diff --git a/apps/i18n-test/src/questions/accordion/writeups/en-US/frameworks/angular/skeleton/index.mdx b/apps/i18n-test/src/questions/accordion/writeups/en-US/frameworks/angular/skeleton/index.mdx
new file mode 100644
index 000000000..cf861be6f
--- /dev/null
+++ b/apps/i18n-test/src/questions/accordion/writeups/en-US/frameworks/angular/skeleton/index.mdx
@@ -0,0 +1,3 @@
+import Description from '../../../index.mdx';
+
+
diff --git a/apps/i18n-test/src/questions/accordion/writeups/en-US/frameworks/angular/solution/index.mdx b/apps/i18n-test/src/questions/accordion/writeups/en-US/frameworks/angular/solution/index.mdx
new file mode 100644
index 000000000..36f80aa68
--- /dev/null
+++ b/apps/i18n-test/src/questions/accordion/writeups/en-US/frameworks/angular/solution/index.mdx
@@ -0,0 +1,7 @@
+import TestCases from '../../../test-cases.mdx';
+import Notes from '../../../notes.mdx';
+import Solution from '../../../solution.mdx';
+
+
+
+
diff --git a/apps/i18n-test/src/questions/accordion/writeups/en-US/frameworks/react/skeleton/index.mdx b/apps/i18n-test/src/questions/accordion/writeups/en-US/frameworks/react/skeleton/index.mdx
new file mode 100644
index 000000000..cf861be6f
--- /dev/null
+++ b/apps/i18n-test/src/questions/accordion/writeups/en-US/frameworks/react/skeleton/index.mdx
@@ -0,0 +1,3 @@
+import Description from '../../../index.mdx';
+
+
diff --git a/apps/i18n-test/src/questions/accordion/writeups/en-US/frameworks/react/solution/index.mdx b/apps/i18n-test/src/questions/accordion/writeups/en-US/frameworks/react/solution/index.mdx
new file mode 100644
index 000000000..36f80aa68
--- /dev/null
+++ b/apps/i18n-test/src/questions/accordion/writeups/en-US/frameworks/react/solution/index.mdx
@@ -0,0 +1,7 @@
+import TestCases from '../../../test-cases.mdx';
+import Notes from '../../../notes.mdx';
+import Solution from '../../../solution.mdx';
+
+
+
+
diff --git a/apps/i18n-test/src/questions/accordion/writeups/en-US/frameworks/svelte/skeleton/index.mdx b/apps/i18n-test/src/questions/accordion/writeups/en-US/frameworks/svelte/skeleton/index.mdx
new file mode 100644
index 000000000..cf861be6f
--- /dev/null
+++ b/apps/i18n-test/src/questions/accordion/writeups/en-US/frameworks/svelte/skeleton/index.mdx
@@ -0,0 +1,3 @@
+import Description from '../../../index.mdx';
+
+
diff --git a/apps/i18n-test/src/questions/accordion/writeups/en-US/frameworks/svelte/solution/index.mdx b/apps/i18n-test/src/questions/accordion/writeups/en-US/frameworks/svelte/solution/index.mdx
new file mode 100644
index 000000000..36f80aa68
--- /dev/null
+++ b/apps/i18n-test/src/questions/accordion/writeups/en-US/frameworks/svelte/solution/index.mdx
@@ -0,0 +1,7 @@
+import TestCases from '../../../test-cases.mdx';
+import Notes from '../../../notes.mdx';
+import Solution from '../../../solution.mdx';
+
+
+
+
diff --git a/apps/i18n-test/src/questions/accordion/writeups/en-US/frameworks/vanilla/skeleton/index.mdx b/apps/i18n-test/src/questions/accordion/writeups/en-US/frameworks/vanilla/skeleton/index.mdx
new file mode 100644
index 000000000..cf861be6f
--- /dev/null
+++ b/apps/i18n-test/src/questions/accordion/writeups/en-US/frameworks/vanilla/skeleton/index.mdx
@@ -0,0 +1,3 @@
+import Description from '../../../index.mdx';
+
+
diff --git a/apps/i18n-test/src/questions/accordion/writeups/en-US/frameworks/vanilla/solution/index.mdx b/apps/i18n-test/src/questions/accordion/writeups/en-US/frameworks/vanilla/solution/index.mdx
new file mode 100644
index 000000000..f68821f19
--- /dev/null
+++ b/apps/i18n-test/src/questions/accordion/writeups/en-US/frameworks/vanilla/solution/index.mdx
@@ -0,0 +1,30 @@
+import TestCases from '../../../test-cases.mdx';
+import Notes from '../../../notes.mdx';
+
+## Solution
+
+### Config / API Design
+
+Part of the complexity of building a component is designing the API for it. The `accordion` function accepts a root element, `$rootEl`, where the accordion sections will be inserted. The second parameter of the `accordion` function is an object used to store the configuration options. At the bare minimum, we will need the following options:
+
+- `items`: A list of item objects. Each item is an object with the fields:
+ - `value`: A unique identifier for the accordion item.
+ - `title`: The text label to show in the accordion title.
+ - `contents`: The contents to show when the section is expanded.
+
+Unlike our typical Vanilla JS approach, we opt not to keep any state in JavaScript this time round and instead rely on the DOM to track each accordion section's state and expand/collapse the appropriate elements based on that accordion's state.
+
+The `accordion` function calls the `init` and `attachEvents` functions to set up the accordion component by rendering the DOM elements and attaching the necessary event listeners.
+
+### `init`
+
+This function sets up the DOM elements that remain throughout the lifecycle of the component, aka they will never be destroyed. The accordion's sections (titles and contents) are rendered.
+
+### `attachEvents`
+
+Only a single event listener is necessary in this component, which is the `click` event, to be added to the root element. We make use of Event Delegation so that only a single event listener has to be added and will work for all of its child contents. However, we have to be careful about checking which element is being clicked on and make sure we're only responding when the title is clicked and not the contents.
+
+When a click is triggered on the accordion title, we'll need to rotate the icon and toggle the `hidden` attribute on the accordion contents.
+
+
+
diff --git a/apps/i18n-test/src/questions/accordion/writeups/en-US/frameworks/vue/skeleton/index.mdx b/apps/i18n-test/src/questions/accordion/writeups/en-US/frameworks/vue/skeleton/index.mdx
new file mode 100644
index 000000000..cf861be6f
--- /dev/null
+++ b/apps/i18n-test/src/questions/accordion/writeups/en-US/frameworks/vue/skeleton/index.mdx
@@ -0,0 +1,3 @@
+import Description from '../../../index.mdx';
+
+
diff --git a/apps/i18n-test/src/questions/accordion/writeups/en-US/frameworks/vue/solution/index.mdx b/apps/i18n-test/src/questions/accordion/writeups/en-US/frameworks/vue/solution/index.mdx
new file mode 100644
index 000000000..36f80aa68
--- /dev/null
+++ b/apps/i18n-test/src/questions/accordion/writeups/en-US/frameworks/vue/solution/index.mdx
@@ -0,0 +1,7 @@
+import TestCases from '../../../test-cases.mdx';
+import Notes from '../../../notes.mdx';
+import Solution from '../../../solution.mdx';
+
+
+
+
diff --git a/apps/i18n-test/src/questions/accordion/writeups/en-US/index.mdx b/apps/i18n-test/src/questions/accordion/writeups/en-US/index.mdx
new file mode 100644
index 000000000..fcc2201d7
--- /dev/null
+++ b/apps/i18n-test/src/questions/accordion/writeups/en-US/index.mdx
@@ -0,0 +1,24 @@
+---
+title: Accordion
+excerpt: Build an accordion component that a displays a list of vertically stacked sections with each containing a title and content snippet
+---
+
+Build an Accordion component that displays a list of vertically stacked sections that each contain a title and content snippet. Some HTML is provided for you as example contents along with a chevron icon.
+
+## Requirements
+
+- By default, all sections are collapsed and are hidden from view.
+- Clicking on a section title toggles the contents.
+ - If the section is collapsed, the section will be expanded and the contents will be displayed.
+ - If the section is expanded, the section will be collapsed and the contents will be hidden.
+- The sections are independent of each other.
+
+## Example
+
+Try out an [example of an accordion component](https://www.w3.org/WAI/ARIA/apg/example-index/accordion/accordion.html).
+
+## Notes
+
+- The focus of this question is on functionality, not the styling. Do not spend too much time writing custom CSS.
+- You may modify the markup (e.g. adding `id`s, data attributes, replacing some tags, etc) and use client-side rendering instead.
+- You may want to think about ways to improve the user experience of the application and implement them (you get bonus credit for doing that during interviews).
diff --git a/apps/i18n-test/src/questions/accordion/writeups/en-US/notes.mdx b/apps/i18n-test/src/questions/accordion/writeups/en-US/notes.mdx
new file mode 100644
index 000000000..86b60f5a7
--- /dev/null
+++ b/apps/i18n-test/src/questions/accordion/writeups/en-US/notes.mdx
@@ -0,0 +1,5 @@
+## Accessibility
+
+Interactive elements need to be focusable, so we'll use a `