diff --git a/docs/index.mdx b/docs/index.mdx index 0993c5b..198eb6e 100644 --- a/docs/index.mdx +++ b/docs/index.mdx @@ -18,8 +18,14 @@ slug: / `} - -Hello, and welcome to **CodeHarborHub**! + Our mission is to provide accessible and comprehensive educational resources for all levels — from beginners to professionals. Whether you want to **kickstart your career**, **master a new language**, or **stay updated with the latest tech**, you’ll find everything you need here. diff --git a/docs/technical-writer/advanced/localization-and-accessibility.mdx b/docs/technical-writer/advanced/localization-and-accessibility.mdx new file mode 100644 index 0000000..e345ed2 --- /dev/null +++ b/docs/technical-writer/advanced/localization-and-accessibility.mdx @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/technical-writer/advanced/open-source-contributions.mdx b/docs/technical-writer/advanced/open-source-contributions.mdx new file mode 100644 index 0000000..e345ed2 --- /dev/null +++ b/docs/technical-writer/advanced/open-source-contributions.mdx @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/technical-writer/advanced/seo-for-documentation.mdx b/docs/technical-writer/advanced/seo-for-documentation.mdx new file mode 100644 index 0000000..e345ed2 --- /dev/null +++ b/docs/technical-writer/advanced/seo-for-documentation.mdx @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/technical-writer/advanced/technical-writing-career-path.mdx b/docs/technical-writer/advanced/technical-writing-career-path.mdx new file mode 100644 index 0000000..e345ed2 --- /dev/null +++ b/docs/technical-writer/advanced/technical-writing-career-path.mdx @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/technical-writer/advanced/writing-for-developers.mdx b/docs/technical-writer/advanced/writing-for-developers.mdx new file mode 100644 index 0000000..e345ed2 --- /dev/null +++ b/docs/technical-writer/advanced/writing-for-developers.mdx @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/technical-writer/documentation/api-documentation.mdx b/docs/technical-writer/documentation/api-documentation.mdx new file mode 100644 index 0000000..e345ed2 --- /dev/null +++ b/docs/technical-writer/documentation/api-documentation.mdx @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/technical-writer/documentation/release-notes.mdx b/docs/technical-writer/documentation/release-notes.mdx new file mode 100644 index 0000000..e345ed2 --- /dev/null +++ b/docs/technical-writer/documentation/release-notes.mdx @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/technical-writer/documentation/software-documentation.mdx b/docs/technical-writer/documentation/software-documentation.mdx new file mode 100644 index 0000000..e345ed2 --- /dev/null +++ b/docs/technical-writer/documentation/software-documentation.mdx @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/technical-writer/documentation/technical-reports.mdx b/docs/technical-writer/documentation/technical-reports.mdx new file mode 100644 index 0000000..e345ed2 --- /dev/null +++ b/docs/technical-writer/documentation/technical-reports.mdx @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/technical-writer/documentation/user-manuals.mdx b/docs/technical-writer/documentation/user-manuals.mdx new file mode 100644 index 0000000..e345ed2 --- /dev/null +++ b/docs/technical-writer/documentation/user-manuals.mdx @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/technical-writer/fundamentals/document-structure-and-formatting.mdx b/docs/technical-writer/fundamentals/document-structure-and-formatting.mdx new file mode 100644 index 0000000..e345ed2 --- /dev/null +++ b/docs/technical-writer/fundamentals/document-structure-and-formatting.mdx @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/technical-writer/fundamentals/review-and-editing.mdx b/docs/technical-writer/fundamentals/review-and-editing.mdx new file mode 100644 index 0000000..e345ed2 --- /dev/null +++ b/docs/technical-writer/fundamentals/review-and-editing.mdx @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/technical-writer/fundamentals/understanding-your-audience.mdx b/docs/technical-writer/fundamentals/understanding-your-audience.mdx new file mode 100644 index 0000000..075e261 --- /dev/null +++ b/docs/technical-writer/fundamentals/understanding-your-audience.mdx @@ -0,0 +1,111 @@ +--- +title: "Understanding Your Audience" +sidebar_label: "1. Understanding Your Audience" +description: "Learn the fundamental process of audience analysis, identify the four core technical audience types, and create user personas for effective documentation." +image: /tutorial/img/tutorials/technical-writer/audience-cover.png +--- + +import SkillCard from '@site/src/components/SkillCard'; +import AudiencePersona from '@site/src/components/AudiencePersona'; +import thumbnail from '/img/tutorials/technical-writer/audience-cover.png'; + + + +
+ +The single most important rule in technical writing is this: **Know Your Audience.** + +Your job is not to write what you know, but to write what the reader **needs** to know, presented in a way they can instantly understand and use. A document written for a CEO must look completely different from one written for a junior developer. + +This page breaks down the process of audience analysis and introduces the four classic audience types you will encounter. + +--- + +## The Four Core Audience Types + +In the world of documentation, readers can generally be segmented into four major categories based on their **technical knowledge** and **purpose for reading**. + +
+ + + + +
+ +### Handling Mixed Audiences + +It’s rare that a document will *only* be read by one type. A design document, for example, might be read by **Experts** (to validate the technical approach) and **Executives** (to approve the budget). + +**How to Adapt:** + +1. **Prioritize:** Identify the **primary audience** (the one who will use the document most often). Write the main body for them. +2. **Sectioning:** Use tools like **Executive Summaries** (for managers) and **Appendixes** (for experts) to isolate information. +3. **Headings:** Use clear, descriptive headings (e.g., "**Implementation Details for Developers**" or "**Quick Start: For Non-Technical Users**") so readers can navigate past what they don't need. + +--- + +## User Personas: Bringing Your Reader to Life + +While the four types are a great starting point, a true professional uses **User Personas**. A persona is a **fictional, yet research-based, profile** that represents a specific segment of your audience. + +Personas make abstract analysis concrete and actionable. + +### The Persona Profile Example + +Let's meet two personas for a new API product: + +
+ {/* This component will be defined in the next step! */} + + +
+ +### How to Use Your Personas + +Whenever you write a section, ask yourself: + +* "Would **Devon** find this confusing?" +* "Does this paragraph provide the information **Penny** actually needs?" + +If the answer is no, you rewrite it. Personas are a shared reference point that keeps the entire team focused on the customer experience. + +--- + +## Key Takeaways + +| Principle | Actionable Step | +| :--- | :--- | +| **Always start here.** | Before writing the first word, identify the primary reader's **Knowledge Level** and **Goal**. | +| **Avoid Jargon.** | Define every technical term that your target audience might not know, even if it feels obvious to you. | +| **Don't Assume.** | If you have multiple audiences, use summaries and clear headings to guide them quickly to their section. | +| **Create a Face.** | Build at least one User Persona to make the abstract reader a real person you are writing *for*. | \ No newline at end of file diff --git a/docs/technical-writer/fundamentals/visual-aids-and-graphics.mdx b/docs/technical-writer/fundamentals/visual-aids-and-graphics.mdx new file mode 100644 index 0000000..e345ed2 --- /dev/null +++ b/docs/technical-writer/fundamentals/visual-aids-and-graphics.mdx @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/technical-writer/fundamentals/writing-style-and-tone.mdx b/docs/technical-writer/fundamentals/writing-style-and-tone.mdx new file mode 100644 index 0000000..59def3e --- /dev/null +++ b/docs/technical-writer/fundamentals/writing-style-and-tone.mdx @@ -0,0 +1,101 @@ +--- +title: Writing Style and Tone +sidebar_label: "2. Writing Style and Tone" +description: "Master the core principles of clear and concise technical writing, including active voice, positive language, and maintaining a consistent, professional tone." +image: /tutorial/img/tutorials/technical-writer/style-and-tone-cover.png +--- + +import SkillCard from '@site/src/components/SkillCard'; +import thumbnail from '/img/tutorials/technical-writer/style-and-tone-cover.png'; + + + +
+ +Technical writing isn't about beautiful prose; it's about **efficiency and clarity**. The goal is to transmit information to the reader with the least amount of effort required to understand it. + +Your style should be concise, direct, and unambiguous. Your tone should be helpful, authoritative, and consistent. + +--- + +## The Three Pillars of Technical Style + +Every word you write must serve a purpose. Here are the three commandments of technical writing style: + +
+ + + +
+ +### Style Rule Focus: Active Voice + +If you remember only one rule from this page, make it this one. **Use the Active Voice.** + +Active voice is clear, direct, and tells the reader *who* is performing the action. Passive voice is vague and often requires more words. + +| Passive Voice (Weak) | Active Voice (Strong) | +| :--- | :--- | +| The file **was saved** by the system. | The system **saved** the file. | +| The update **can be performed** by running the script. | **Run** the script to **perform** the update. | +| The error **will be reported** to the user. | The tool **reports** the error to the user. | + +
+ +:::tip +In instructional writing (how-to guides), the subject of the sentence is usually the reader. Use the imperative mood: "**Install** the package," not "The package should be installed." +::: + +--- + +## Establishing Your Tone + +Tone refers to the attitude conveyed in your writing. While style is about grammar and structure, tone is about personality. + +A technical document should always maintain a **helpful, objective, and professional** tone. + +### Avoid Emotional and Subjective Language + +Technical documents are not blogs or marketing copy. Your goal is to convey facts and instructions, not feelings. + +| Tone to Avoid | Example | Professional Tone | +| :--- | :--- | :--- | +| **Exaggerated** | "Our API delivers an *astonishingly* seamless experience." | "The API provides a seamless integration." | +| **Subjective** | "This is the **best** way to configure the feature." | "This configuration is recommended for production environments." | +| **Casual/Slang** | "If stuff breaks, hit us up on Slack." | "If an error occurs, contact support via our Slack channel." | + +### Use Positive Language + +Whenever possible, phrase instructions and messages to focus on the positive outcome, not the negative failure. + +| Negative Framing | Positive Framing | Impact | +| :--- | :--- | :--- | +| **Do not** forget to restart the server. | **Remember** to restart the server. | **Focuses on action.** | +| You **cannot** proceed until the license is purchased. | You **can** proceed after purchasing the license. | **Focuses on success.** | +| If the connection **fails**, run the troubleshooting script. | If the connection **is unsuccessful**, run the troubleshooting script. | **Reduces user anxiety.** | + +--- + +## Consistency: The Unspoken Rule + +Consistency across your entire documentation set is vital. It creates a predictable, trustworthy reading experience. This is typically enforced using a **Style Guide**. + +A Style Guide defines: + +* **Terminology:** Is it 'Git,' 'git,' or 'GIT'? Is it 'database' or 'DB'? (e.g., Always use **Git**). +* **Voice:** Are we friendly and casual (like a startup) or formal and serious (like a financial institution)? (e.g., We use a helpful, authoritative, and direct voice). +* **Formatting:** How do you capitalize headings? Do you use serial commas (the Oxford comma)? (e.g., Always use the Oxford comma). + +When you start a new documentation project, the first questions you should ask are: **"Do we have a Style Guide? Can I see the Glossary?"** diff --git a/docs/technical-writer/index.mdx b/docs/technical-writer/index.mdx new file mode 100644 index 0000000..816ca38 --- /dev/null +++ b/docs/technical-writer/index.mdx @@ -0,0 +1,297 @@ +--- +title: Technical Writer Tutorial +sidebar_label: Overview +description: "A comprehensive tutorial on technical writing principles, tailored for creating clear, effective, and engaging documentation on CodeHarborHub." +tags: + [ + technical-writing, + documentation, + mdx, + tutorial, + codeharborhub, + best-practices + ] +keywords: + - technical writing + - documentation + - api docs + - writing tools + - docusaurus + - markdown + - codeharborhub tutorials + - writer roadmap +image: /tutorial/img/tutorials/technical-writer/technical-writer-cover.png +--- + +import thumbnail from '/img/tutorials/technical-writer/technical-writer-cover.png'; + + + +
+ +Welcome! Technical writing is the crucial link between complex code and a thriving developer community. It’s the art of turning brilliant engineering into an easy-to-use product. + +For CodeHarborHub, our goal is to produce documentation that is not just correct, but a genuine pleasure to read. This tutorial will guide you through the **principles** of effective technical communication and the **specific tools** our platform provides (like Live Code and Mermaid) to make your content exceptional. + +--- + +## Chapter 1: Know Your Audience and Purpose + +Before you start writing, answer these two questions: **Who is reading this?** and **What do I want them to be able to do?** + +### 1.1 Define Your Reader (The Persona) + +The language, detail, and assumed knowledge must match your reader. Tailor your content! + +| Audience Type | Key Goal | Tone & Focus | +| :--- | :--- | :--- | +| **Beginner/Learner** | "Help me build something simple and feel successful." | Use friendly, encouraging tone. Focus on **Tutorials** and step-by-step guides. Define all technical terms. | +| **Experienced Developer** | "I need the precise syntax and edge case details." | Use a professional, concise tone. Focus on **Reference** and in-depth **Conceptual** docs. Assume basic language knowledge. | +| **Architect/Manager** | "I need the high-level overview and trade-offs." | Focus on **Conceptual** overviews, system diagrams (using **Mermaid!**), and integration guides. | + +### 1.2 The Four Pillars of Documentation + +Every piece of documentation fits into one of these categories. Structure your writing based on its primary purpose. + +| Pillar | Goal | Analogy | CodeHarborHub Example | +| :--- | :--- | :--- | :--- | +| **Tutorials** | **Learning** (Get started) | The cooking class | "Your First Component with React" | +| **How-to Guides** | **Solving** (Complete a task) | The recipe book | "How to Configure OAuth in Your Project" | +| **Reference** | **Information** (Look up detail) | The dictionary/encyclopedia | API documentation, function parameters. | +| **Conceptual** | **Understanding** (Gain insight) | The textbook | "Understanding Asynchronous Programming" | + +--- + +## Chapter 2: The CodeHarborHub Toolkit + +We use MDX, which gives us superpowers beyond standard Markdown. Use these features to make your documentation clear, functional, and engaging. + +### 2.1 Rich Code and Interactivity + +Plain code blocks are good, but interactive ones are great. + +* **Interactive Code Editor (`live`):** When showing frontend code (React, etc.), use the `live` prop to allow readers to modify and run the code right on the page. + + ````md title="Example Live Code Block" + ```jsx live + // Let the reader play with the code! + function Counter() { + const [count, setCount] = useState(0); + return ( + + ); + } + ``` + ```` + +* **Multi-language Support (``):** For tutorials that span multiple languages (e.g., frontend/backend, or different language implementations of an algorithm), use the `` component. + + ````md title="Showing Multiple Languages" + + + ```py + print("Hello from Python") + ``` + + + ```go + fmt.Println("Hello from Go") + ``` + + + ```` + +* **Code Highlighting:** Use a metadata string to draw attention to specific lines of code. This is non-negotiable for complicated examples. + + ````md title="Highlighting Key Lines" + ```javascript {4, 7-8} showLineNumbers + function calculate(x) { + // Line 1 is fine + let result = 0; + if (x > 10) { // Highlighted + result = x * 2; + } else { + // These lines are also highlighted + result = x + 5; + } + return result; + } + ``` + ```` + +### 2.2 Visual and Flow Elements + +Use these elements to simplify complex concepts and processes. + +* **Diagrams with Mermaid:** A picture is worth a thousand lines of code. Use Mermaid for flowcharts, sequence diagrams, and state diagrams. This is vital for Conceptual docs. + + ````md title="Mermaid for Architecture Flow" + ```mermaid + graph LR + User[Browser] --> API(REST API); + API --> DB[(Database)]; + ``` + ```` + +* **Math Equations with KaTeX:** For advanced topics like Data Science, Cryptography, or Algorithm Analysis, use KaTeX for perfectly rendered math. Don't use blurry images for equations! + + ```latex title="Example Inline Equation" + The Big O complexity is $O(n \log n)$. + ``` + ```latex title="Example Block Equation" + $$ + E = mc^2 + $$ + ``` + +### 2.3 Effective Use of Admonitions + +Admonitions (Notes, Warnings, Dangers, etc.) are crucial for guiding the reader's attention. Use them **sparingly**—if everything is important, nothing is. + +| Admonition | Purpose | Example | +| :--- | :--- | :--- | +| `:::tip` | Best practice, efficiency gain. | *Tip: Use asynchronous calls for better performance.* | +| `:::caution` | Something that might be confusing or lead to a small error. | *Caution: The credentials might expire after 30 minutes.* | +| `:::warning` | Potential data loss or breaking change. | *Warning: This operation is destructive and cannot be undone.* | +| `:::danger` | Severe risk, security issue, or major system failure. | *Danger: Exposing this key publicly will compromise all user data.* | + +--- + + +## Chapter 3: Writing with Clarity and Conciseness + +Clear code is good; clear writing about code is essential. The primary goal of a technical writer is to minimize the time a developer spends searching for or trying to understand information. We achieve this through unwavering **clarity** and aggressive **conciseness**. + +If your documentation is an obstacle course, developers will jump off and find a better path (or, worse, try to figure it out themselves). + +### 3.1 Focus on Action: Use Active Voice + +The single most effective technique for clear technical writing is to use the **Active Voice**. It tells the reader who (the actor) is doing what (the action) to whom/what (the target). This structure is direct, unambiguous, and shorter. + +#### 3.1.1 The Rule of Thumb: Actor-Action-Target + +| Voice | Structure | Example | Impact | +| :--- | :--- | :--- | :--- | +| **Passive** | Target $\rightarrow$ Action $\rightarrow$ Actor | **The component** *was rendered* by the React engine. | Vague, less direct. Who cares about the engine right now? | +| **Active** | Actor $\rightarrow$ Action $\rightarrow$ Target | **The React engine** *renders* the component. | Clear, immediate, and concise. | + +#### 3.1.2 Imperative Active Voice (For Instructions) + +When writing step-by-step instructions (the majority of tutorials and how-to guides), use the imperative voice. The "actor" is the implied user ("you"). This cuts out unnecessary words and turns passive observation into direct action. + +| Passive/Wordy | Active (Imperative) | +| :--- | :--- | +| The configuration file **should be opened** before proceeding. | **Open** the configuration file. | +| The button **must be clicked** by the user to start the process. | **Click** the button to start the process. | +| It is recommended that **a new branch be created**. | **Create** a new branch. | + +--- + +### 3.2 Eliminate the Fluff: Conciseness + +Conciseness is not about *less* information; it's about **more density**. Every word must earn its place on the page. Cut anything that doesn't add meaning. + +#### 3.2.1 Remove Wordy Phrases + +Replace long prepositional phrases and bureaucratic filler with single, strong words. + +| Wordy Phrase | Concise Replacement | +| :--- | :--- | +| due to the fact that | because, since | +| at this point in time | now | +| in the event that | if | +| a majority of | most | +| utilizes / makes use of | uses | +| with the exception of | except | +| for the purpose of | for, to | + +**Example:** +* **Wordy:** *Due to the fact that* the API **utilizes** OAuth, the token *must be generated for the purpose of* authentication. +* **Concise:** *Because* the API **uses** OAuth, the token *must be generated to* authenticate. + +### 3.3 Ditch the Throat-Clearing + +Avoid phrases that simply introduce a sentence without adding value. Get straight to the point. + +| Throat-Clearing | Concise Start | +| :--- | :--- | +| It is important to note that... | (Just state the note.) | +| It should be remembered that... | (Just state the fact.) | +| There are three ways to... | Three ways to... | +| In order to... | To... | + +### 3.4 Attack Weak Verbs + +Replace weak verb phrases (often involving forms of *to be*, *to have*, or *to make*) with strong, active verbs. + +| Weak Verb Phrase | Strong Verb | +| :--- | :--- | +| is responsible for the migration | migrates | +| make an adjustment to the settings | adjust the settings | +| provides functionality for logging | logs | +| had a major impact on performance | impacted performance significantly | + +--- + +### 3.5 Mind the Gap: Jargon and Acronyms + +Jargon is not bad; *unnecessary* or *undefined* jargon is bad. Know the line between useful shorthand for your audience (e.g., "HTTP request") and exclusionary fluff (e.g., "synergistic paradigm shifts"). + +#### 3.5.1. Define or Replace Technical Jargon + +If a term is fundamental to the topic but might be new to a reader (especially in an introductory tutorial): + +1. **Define it** on first use. +2. Use the defined term consistently thereafter. +3. If the document is for a very broad audience, try to replace it with a simpler, everyday phrase. + +| Jargon to Reconsider | Simpler Alternative (if appropriate) | +| :--- | :--- | +| Mutate the array | Change the array | +| Idempotent operation | An operation that can run repeatedly with the same result | +| Time to Market (TTM) | Release time | + +#### 3.5.2. Handle Acronyms Gracefully + +Never assume a reader knows your acronyms, especially proprietary ones. + +* **Rule:** Spell out the acronym on its first use in every document. +* **Correct:** The **CodeHarborHub Documentation System (CHHDS)** provides MDX features. The **CHHDS** allows for live code. + +## Chapter 4: Structuring Developer Documentation + +Ah, the "how-to-find-the-thing" chapter! Good developer documentation is a well-organized library, not a disorganized heap of brilliant-but-random notes. The most widely adopted and effective framework for this is the **Diátaxis framework**. + +It structures all technical content into four distinct categories, based on the user's need: + +| Documentation Type | User Goal | Description | Analogy | +| :--- | :--- | :--- | :--- | +| **1. Tutorials** | **Learning** (skill acquisition) | A guided, step-by-step lesson for a beginner. The goal is a successful, reproducible outcome to build competence. | A cooking class. | +| **2. How-To Guides** | **Doing** (application of skill) | Goal-oriented instructions to solve a specific problem or achieve a concrete goal. Assumes some prior knowledge. | A recipe. | +| **3. Explanations** | **Understanding** (knowledge acquisition) | Conceptual, background, or architectural content that provides context and answers the "Why?" | A scientific paper or technical discussion. | +| **4. Reference** | **Information** (knowledge application) | Technical descriptions of the product's "machinery" (APIs, commands, classes, configuration). Structured for quick lookup. | A dictionary or encyclopedia. | + +--- + +### 4.1 Key Structuring Principles + +* **Separate Content by Purpose:** The core principle of Diátaxis. Don't mix a conceptual explanation into a step-by-step tutorial. If you find yourself doing that, you probably need a link to a separate 'Explanation' page. +* **Action vs. Knowledge:** + * **Action-oriented** documentation (*Tutorials* and *How-To Guides*) shows the user *what* to do. + * **Knowledge-oriented** documentation (*Explanations* and *Reference*) tells the user *what* to know. +* **Study vs. Work:** + * *Tutorials* and *Explanations* support the user's **study** (learning). + * *How-To Guides* and *Reference* support the user's **work** (getting things done). + +By clearly separating these four types, you make the content easier to find, easier to write, and ensure a better experience for both a brand new user and a seasoned veteran looking for one specific parameter. + +## Recommended Reading + +Now that you have the basics, dive deeper into these resources to refine your technical writing skills: + +* [Link to CodeHarborHub Style Guide](https://codeharborhub.github.io/docs/markdown-features) +* [Write the Docs - Technical Writing Resources](https://www.writethedocs.org/guide/writing/) +* [Google Developer Documentation Style Guide](https://developers.google.com/style) +* [The Elements of Style by Strunk and White](https://www.bartleby.com/141/) \ No newline at end of file diff --git a/docs/technical-writer/intro/best-practices.mdx b/docs/technical-writer/intro/best-practices.mdx new file mode 100644 index 0000000..9e9fa26 --- /dev/null +++ b/docs/technical-writer/intro/best-practices.mdx @@ -0,0 +1,78 @@ +--- +title: "Best Practices for Technical Documentation" +description: "Essential guidelines for clarity, consistency, and maintaining high-quality documentation in a Docs-as-Code environment." +sidebar_label: "4. Best Practices" +image: /tutorial/img/tutorials/technical-writer/best-practices.png +--- + +import thumbnail from '/img/tutorials/technical-writer/best-practices.png'; + + + +
+ +Having the right tools is just the beginning. **Best practices** are the rules that ensure your documentation is clear, accurate, and scalable over time. + +These guidelines are focused on maintaining high quality in a modern, developer-centric environment. + +## 1. Adopt the Diátaxis Framework + +This is the single most important rule for structuring your documentation. The Diátaxis framework helps you categorize content based on the user's intent, solving the problem of "where do I put this?" + +| Type | User Intent | Primary Goal | Best Practice | +| :--- | :--- | :--- | :--- | +| **Tutorials** | Learning how to do something new. | Teach the user, step-by-step. | **Hands-on, single path.** Start with "Hello World" and end with success. | +| **How-To Guides** | Solving a specific problem. | Show how to achieve a goal. | **Focused, actionable steps.** Title should be a verb: "Configure," "Integrate," "Troubleshoot." | +| **Conceptual** | Understanding the topic/product. | Explain the why and the how it works. | **High-level, narrative.** Use diagrams (Mermaid!) and analogies. | +| **Reference** | Looking up technical specifics. | Provide accurate technical details. | **Structured, pure facts.** Use tables, parameters, and code snippets. | + +
+ +:::tip Best Practice +Never mix document types. Do not put conceptual explanations inside a How-To Guide, or a reference table inside a Tutorial. Link, don't combine. +::: + +## 2. Embrace the Docs-as-Code Workflow + +Since you're using Docusaurus, you are already committed to this workflow. Maximize its benefits: + +### 2.1 Treat Docs Like Code + +* **Version Control:** Use Git. Commit early and often. Every content change should be traceable to a specific, descriptive commit message. +* **Pull Requests (PRs):** All content changes should go through a PR process. This enables peer review from developers (for technical accuracy) and other writers (for clarity and style). +* **Branching:** Always work on a separate feature branch. The docs for a new feature should live on the same branch as the code for that feature, ensuring they merge and deploy together. + +### 2.2 Prioritize Plain Text + +* **Stick to Markdown/MDX:** Avoid embedding complex formatting or elements that break the portability of the plain text file. The simpler the text file, the easier it is to maintain for years. +* **Automate Quality:** Configure your repository to use a linter (like **write-good** or **Vale**) to check for grammatical, stylistic, and tone errors automatically with every commit. + +## 3. Focus on Clarity and Consistency + +The cardinal sins of documentation are ambiguity and inconsistency. Here’s how to avoid them: + +### 3.1 Write for Your Audience + +* **Define Jargon:** Always define specialized terms on first use. If your audience is diverse, you may need a separate **Glossary** (a Conceptual document!). +* **The Golden Rule:** Always write one level *below* your audience’s presumed knowledge. If you're writing for mid-level developers, explain everything as if you're writing for junior developers. Over-explaining is better than under-explaining. + +### 3.2 Maintain a Style Guide + +Consistency is achieved through rules. If your company doesn't have a technical writing style guide (e.g., *Google Developer Documentation Style Guide*), adopt one. + +| Element | Rule | Example | +| :--- | :--- | :--- | +| **Voice** | Use the active voice and direct address ("you"). | **Good:** You must run the installer. **Bad:** The installer should be run. | +| **UI Elements** | Use **bold** for buttons, screen names, or menu items. | Click the **Settings** menu, then select **Deploy**. | +| **Code** | Use inline code blocks (`code`) for file paths, variable names, and function names. | Set the `MAX_RETRIES` variable in the `config.yaml` file. | + +## 4. Maintenance is Mandatory + +Documentation is not a one-time task; it's a perpetual commitment. If the code changes, the docs *must* change. + +* **Schedule Audits:** Regularly audit your existing documentation. Tools can find broken links, but only a human writer can identify outdated procedures. + * *Self-Correction:* If an old doc is still receiving high traffic but is outdated, either update it or archive it with a clear note linking to the current version. +* **Use Feedback Loops:** Encourage users to report errors or suggest improvements. Docusaurus makes this easy with "Edit this page" links that direct users to GitHub to create a PR. **You are only as good as the feedback you receive.** +* **Deprecation:** When you remove a feature or API, update the documentation *before* the code is merged, or at the very least, simultaneously. Never leave a deprecated feature fully documented. + +You've now established your methodology. The next crucial step is determining *who* you are writing for, which governs everything from tone to vocabulary. \ No newline at end of file diff --git a/docs/technical-writer/intro/skills-required.mdx b/docs/technical-writer/intro/skills-required.mdx new file mode 100644 index 0000000..81d9910 --- /dev/null +++ b/docs/technical-writer/intro/skills-required.mdx @@ -0,0 +1,113 @@ +--- +title: "Skills for Technical Writers" +description: "A breakdown of the technical (hard) and interpersonal (soft) skills every modern technical writer needs to succeed in a Docs-as-Code environment." +sidebar_label: "5. Skills Required" +image: "/tutorial/img/tutorials/technical-writer/skills-required-cover.png" +--- + +import SkillCard from '@site/src/components/SkillCard'; +import thumbnail from '/img/tutorials/technical-writer/skills-required-cover.png'; + + + +
+ +Think of the technical writer's skill set as a tripod: one leg is **Writing**, one is **Technical Knowledge**, and the third is **Interpersonal (Soft) Skills**. If any one leg is too short, the whole thing tips over. + +Here's the breakdown of the most critical skills you need to cultivate, starting with the measurable, 'hard' skills that get you in the door. + +## 1. Hard Skills: The Measurable Know-How + +These are the job-specific, teachable abilities required to manage content in a Docs-as-Code system. + +### **A. Core Writing & Editing** + +This may seem obvious, but it's the foundation. + +* **Clarity and Conciseness:** The ability to distill complex, often jargony, information into clear, simple, and unambiguous language. Your goal is to reduce cognitive load on the reader. +* **Structure and Flow:** Knowing how to organize information using the **Diátaxis Framework** (Tutorials, How-To Guides, Conceptual, Reference) to ensure the user can find what they need instantly. +* **Proofreading and Consistency:** Meticulous attention to detail regarding grammar, punctuation, and adherence to a specific **style guide** (like the *Google Developer Style Guide*). + +### **B. Technical Tool Proficiency** + +In a Docusaurus environment, you must be comfortable with the infrastructure. + + + + + +## 2. Soft Skills: The Interpersonal Essentials + +These are often the most difficult to learn and the most valuable traits for long-term success. They govern how you get the information you need. + +### **A. Empathy (The User-Centric Mindset)** + +Empathy is the core of user-centric documentation. + + + +:::tip Empathy in Action +When writing a troubleshooting guide, an empathetic writer doesn't just list the fix; they acknowledge the user's frustration ("If you see this cryptic error message, don't worry..."). +::: + +### **B. Research and Critical Thinking** + +You are an investigative journalist for the engineering team. + +* **Curiosity:** The relentless drive to ask **"Why?"** until you fully understand a concept. If you don't understand it, your audience won't either. +* **Skepticism:** Never take a single source for granted. Cross-reference what a developer *says* with how the code *actually works* and how the user *experiences* the product. +* **Analytical Synthesis:** The ability to gather information from disparate sources (JIRA tickets, developer interviews, existing code, design documents) and synthesize it into one cohesive, logical narrative. + +### **C. Communication and Collaboration** + +Technical writing is a team sport. + +* **Active Listening:** This is the most crucial skill for interviewing Subject Matter Experts (SMEs). Listen to understand their technical explanations, and then paraphrase it back to them in simple language to confirm your accuracy. +* **Conflict Resolution:** Effectively communicating documentation deadlines and resource needs to developers and product managers who prioritize code releases. +* **Interviewing:** Knowing how to prepare targeted questions that elicit clear, actionable technical details from busy engineers without wasting their time. + +## 3. The Secret Weapon: Adaptability + +In the tech industry, tools, products, and priorities change constantly. Your documentation system might shift from Docusaurus to something else, or your product focus might pivot. + + + +If you cultivate this balance of technical rigor and human understanding, you will not only be a great writer but a truly indispensable member of any development team. + +--- +You've now covered the tools, best practices, and skills required for the job. The next logical step is to tackle the foundation of all good documentation: **Audience Analysis**. + +You can learn more about the necessary soft skills for working with a team on a document in this video: + +
+ + + +
+ +This video, while general, provides a good overview of the differences between hard and soft skills, which is a core concept for aspiring technical writers. \ No newline at end of file diff --git a/docs/technical-writer/intro/tools-for-technical-writers.mdx b/docs/technical-writer/intro/tools-for-technical-writers.mdx new file mode 100644 index 0000000..ec61c7e --- /dev/null +++ b/docs/technical-writer/intro/tools-for-technical-writers.mdx @@ -0,0 +1,192 @@ +--- +title: "The Essential Toolkit for Modern Technical Writers" +sidebar_label: "3. Tools For Technical Writers" +description: "An introduction to the core tools—Markdown, Git, VS Code, and Docusaurus—that power a modern Docs-as-Code workflow for technical writers." +image: /tutorial/img/tutorials/technical-writer/tools-for-technical-writers.png +--- + +import thumbnail from '/img/tutorials/technical-writer/tools-for-technical-writers.png'; + +Welcome to the job! If you're coming from the world of term papers and memos, you might expect your main tool to be Microsoft Word. Think again. + + + +
+ +In the modern software world, documentation is built like code. This is called the **Docs-as-Code** workflow, and it requires a unique and powerful set of tools that we'll explore here. + +## 1. The Core: Plain Text and Markup + +Every modern documentation site, including this one (built with Docusaurus!), starts with simple text files. + +### A. Markdown and MDX + +Forget proprietary file formats. We use **Markdown** because it’s a lightweight language that’s easy to read, write, and convert into HTML. + +**MDX** is Markdown's superpower. It allows you to embed interactive web components (written in React) directly into your documents. This is how we create custom features like the `ToolCard` you see below! + + + +### B. The Workbench: VS Code + +Since your files are just plain text, you need a high-powered text editor, not a word processor. + + + +--- + +## 2. The Infrastructure: Docusaurus and Git + +These tools automate the hard parts of documentation: publishing, versioning, and collaborating. + +### A. The Publishing Engine: Docusaurus + +Since your team has chosen Docusaurus, you get powerful features straight out of the box that traditional tools simply cannot offer. + +| Docusaurus Feature | Why It Matters to the Technical Writer | +| :--- | :--- | +| **Document Versioning** | Crucial for software! Automatically maintains separate documentation for different releases (e.g., v1.0, v2.0). | +| **Search (Algolia Integration)** | Provides blazing-fast, high-quality search functionality across all your docs. | +| **MDX Support** | Allows you to embed interactive code blocks or custom design components. | +| **Sidebar Navigation** | Simplifies organizing complex information into a logical, hierarchical structure. | + +### B. The Safety Net: Git and GitHub + +As a technical writer, you will quickly learn to use **Git** (the version control system) via **GitHub** (the hosting platform). + +This allows your content to be managed exactly like the software code. + +* **You never lose work:** Git tracks every change. Made a mistake? You can instantly rewind the file to any previous version. +* **You collaborate cleanly:** When a developer spots a typo, they don't email you; they submit a **Pull Request (PR)**. This forces a clean review process before the change goes live. +* **You stay in sync:** You write docs on a separate branch that only merges into the main site when the corresponding code is ready for release. + + + +## 3. The Quality Assurance Stack + +These tools ensure your words are perfect and your visuals are clear, and your math is precise. + +### **A. Mathematical Notation: KaTeX** + +For technical writers in data science, mathematics, or physics, rendering complex equations is a daily task. Docusaurus (via MDX) handles this beautifully using **KaTeX** or **MathJax**. + + + +You can use LaTeX syntax in your MDX files in two ways: + +1. **Inline Formula (Single Dollar Signs):** Use `$` to embed math directly within a sentence. + + + + ````md + This is an inline equation: $E = mc^2$, which relates energy and mass. + ```` + + + This is an inline equation: $E = mc^2$, which relates energy and mass. + + + + +2. **Block Formula (Double Dollar Signs):** Use `$$` to center and display complex equations on their own line. + + + + ````md + Here is a block equation: + + $$ + \int_{a}^{b} x^2 \,dx = \frac{b^3}{3} - \frac{a^3}{3} + $$ + ```` + + + Here is a block equation: + + $$ + \int_{a}^{b} x^2 \,dx = \frac{b^3}{3} - \frac{a^3}{3} + $$ + + + +There are two ways to include LaTeX in your MDX files: inline and block. + + +### B. Style and Grammar + +No matter how good your writing is, you need a second pair of eyes that can enforce a specific style guide. + + + +### C. Visual Content (Screenshots and Diagrams) + +The best tutorials show, not just tell. + +#### 1. Screen Capture and Annotation + +Every technical writer needs a high-quality screen capture and annotation tool to create clear, visually consistent instructional images. + + + +#### 2. Code-Based Diagramming: Mermaid + +Forget saving diagrams as separate `.png` files that quickly become outdated. **Mermaid** allows you to draw diagrams using simple text syntax directly in your MDX file. + + + + ````md + ```mermaid + graph TD; + A[Idea for Feature] --> B{Code Complete?}; + B -- Yes --> C[Docs PR Ready]; + C --> D[Review/Merge]; + D --> E(Deploy New Docs); + B -- No --> A; + ``` + ```` + + + + ```mermaid + graph TD; + A[Idea for Feature] --> B{Code Complete?}; + B -- Yes --> C[Docs PR Ready]; + C --> D[Review/Merge]; + D --> E(Deploy New Docs); + B -- No --> A; + ``` + + + + + + +You've now got the entire foundation for a modern technical writing career. \ No newline at end of file diff --git a/docs/technical-writer/intro/types-of-technical-writing.mdx b/docs/technical-writer/intro/types-of-technical-writing.mdx new file mode 100644 index 0000000..72f8b1d --- /dev/null +++ b/docs/technical-writer/intro/types-of-technical-writing.mdx @@ -0,0 +1,96 @@ +--- +title: Types of Technical Writing +sidebar_label: "2. Types of Technical Writing" +description: "A breakdown of the four main categories of documentation (Conceptual, Procedural, Reference, and Tutorials) and how they fit together using the Diátaxis framework." +tags: + [ + technical-writing, + documentation, + diataxis, + conceptual, + procedural, + reference, + tutorial + ] +keywords: + - diataxis framework + - types of documentation + - procedural knowledge + - reference documentation + - conceptual documentation + - technical writing taxonomy +image: /tutorial/img/tutorials/technical-writer/types-of-technical-writing-cover.png +--- + +import Image from '@theme/IdealImage'; +import thumbnail from '/img/tutorials/technical-writer/types-of-technical-writing-cover.png'; + +Technical writing is a broad field, but in the software world, almost all content falls into four primary categories. When your documentation is missing one of these, you have a knowledge gap. + + + +
+ +We will focus on the structure promoted by the **Diátaxis framework**, which is the gold standard for organizing technical docs today. Think of it as the ultimate cheat sheet for what to write and where to put it. + +## The Four Types of Technical Writing + +The Diátaxis framework divides documentation into four distinct types, each serving a unique purpose and audience need. + +The four categories are: + +1. **Tutorials (Learning)**: The 'walkthrough' +2. **How-To Guides (Practical)**: The 'instructions' +3. **Reference (Information)**: The 'encyclopedia' +4. **Conceptual (Understanding)**: The 'explanation' + +### 1. Tutorials (Learning) + +The tutorial is where a beginner starts. Its goal is to allow the user to **successfully complete a task** in a controlled, guided environment. + +* **Goal:** Learn how to do something for the **first time**. +* **Tone:** Friendly, encouraging, and highly prescriptive ("Do this, then do that."). +* **Structure:** A sequence of steps that lead to a tangible result. It must be repeatable. +* **Example:** "Setting up your first API connection in 5 minutes," or "How to build a simple To-Do app with our SDK." + +### 2. How-To Guides (Practical) + +How-to guides (also called **Procedural Documentation**) are the bread and butter of your documentation. The user already knows *what* the product is and *why* they need it—they just need to get a specific job done quickly. + +* **Goal:** Solve a **specific, real-world problem** or accomplish a task. +* **Tone:** Direct, action-oriented, and matter-of-fact. +* **Structure:** A short, numbered list of steps that focus on a singular outcome. +* **Example:** "How to reset your password," "How to configure two-factor authentication," or "How to deploy to a staging environment." + +:::tip The Key Difference +A **Tutorial** is for learning. A **How-To Guide** is for doing (and usually re-doing). A tutorial teaches you to fish; a how-to guide tells you where to cast your line today. +::: + +### 3. Reference (Information) + +Reference documentation is the authoritative source of truth. It's not meant to be read from start to finish. It's a technical encyclopedia for when you need a quick, specific fact. + +* **Goal:** Provide **accurate, complete, and low-level detail** on system components. +* **Tone:** Neutral, objective, and dense with facts. +* **Structure:** Highly consistent and predictable (e.g., alphabetically or by hierarchy). +* **Example:** **API documentation** (listing every parameter, data type, and error code), command-line interface (CLI) manuals, or configuration file reference. + +### 4. Conceptual (Understanding) + +Conceptual documentation is the "why" that ties everything together. It helps the reader build a mental model of the product. It explains the high-level architecture, the design decisions, and the *philosophy* behind the product. + +* **Goal:** Explain the **big picture** and provide context. +* **Tone:** Explanatory, analytical, and informative. +* **Structure:** Prose, often using diagrams, metaphors, and analogies. +* **Example:** "An Overview of our Microservices Architecture," "Understanding the Data Model," or "How our Caching Layer Works." + +## The Diátaxis Quadrant + +The magic of this framework is how these four types interlock. No single document type can satisfy every user need, which is why your documentation must contain all four. + +| | **Practical Use** | **Theoretical Use** | +| :--- | :--- | :--- | +| **Goal: Learn** | **1. TUTORIALS** (Get started) | **4. CONCEPTUAL** (Understand the "why") | +| **Goal: Do** | **2. HOW-TO GUIDES** (Complete a task) | **3. REFERENCE** (Look up a specific fact) | + +As a developer writing documentation, you must ask yourself: **"What is the user trying to achieve right now?"** and choose the corresponding format. \ No newline at end of file diff --git a/docs/technical-writer/intro/what-is-technical-writing.mdx b/docs/technical-writer/intro/what-is-technical-writing.mdx new file mode 100644 index 0000000..ae9fe86 --- /dev/null +++ b/docs/technical-writer/intro/what-is-technical-writing.mdx @@ -0,0 +1,70 @@ +--- +title: "What is Technical Writing?" +sidebar_label: "1. What is Technical Writing?" +description: "An introduction and definition of technical writing, focusing on its core purpose and relevance in the software and documentation world." +tags: + [ + technical-writing, + documentation, + intro, + definition, + mdx, + tutorial + ] +keywords: + - technical writing definition + - what is documentation + - technical writer role + - clarity and conciseness + - audience-centered writing +--- + +Welcome! You're here because you've seen the term "Technical Writer" floating around the tech space and want to know what the job actually entails. + +In the simplest terms, **Technical Writing is the art of translating complex information into clear, concise, and accessible language for a specific audience.** + +It’s the crucial bridge between the complex **machinery** of a product (the code, the hardware, the API) and the person who needs to use it (the user, the developer, the internal team). + +--- + +## The Goal: Enable User Success + +Unlike a novelist whose goal is to entertain, or a marketer whose goal is to persuade, the technical writer has one primary mission: **to enable the user to accomplish a specific task successfully.** + +When you're reading documentation, you're not there to enjoy the prose—you're there to **do something**. + +| Quality | What it means | Why it matters | +| :--- | :--- | :--- | +| **Clear** | No ambiguity. The meaning is instantly obvious. | Confusion leads to support tickets and user frustration. | +| **Concise** | Use only the words absolutely necessary. | Developers are busy. Respect their time. Get to the point. | +| **Accurate** | The instructions and facts must be 100% correct. | An inaccurate technical document can break a production system. | +| **Audience-Aware** | Language, tone, and depth are tailored to the reader. | You don't explain a *for-loop* to a senior developer or an *API endpoint* to a non-technical end-user. | + +--- + +## Why Technical Writing Matters (Especially to Developers) + +You might think, "My code is self-documenting!" or "I'll just add a few comments." As a developer, you *already* practice technical writing through commit messages, bug reports, and code comments. Becoming a better technical writer makes you a better developer. + +* **For the End User (Adoption):** Great documentation is a product feature. If a developer can't easily figure out how to integrate your API, they will choose a competitor's. **Good docs drive adoption.** +* **For the Team (Internal Efficiency):** Clear internal documents (like Standard Operating Procedures or Architectural Decision Records) reduce "bus factor," speed up new hire onboarding, and prevent tribal knowledge from disappearing. +* **For Yourself (Problem-Solving):** The act of writing down a complex system or process forces you to identify flaws, contradictions, or gaps in your own understanding. As one developer famously said, "I write code to make the machine happy, and I write documentation to make myself happy." + +## Where Does Technical Writing Live? + +The field is broad, but in the software world, you'll find technical writing in these formats: + +* **API Reference:** Factual, detailed descriptions of endpoints, functions, classes, and parameters. +* **Tutorials and Quickstarts:** Step-by-step guides for first-time use (like this very page!). +* **How-To Guides:** Instructions for specific, real-world tasks ("How to set up SSO," "How to migrate data"). +* **Conceptual/Explanation Guides:** Deep dives into architecture, design choices, and "Why" the product works the way it does. +* **Release Notes:** Summaries of new features, bug fixes, and breaking changes. +* **Tooltips & UI Text:** The tiny bits of text that appear in an application to guide the user (known as **UX writing** or **microcopy**). + +> **In short:** A Technical Writer takes a complicated, specialized topic and makes it universally understandable. They are the empathy engine of the product team. + +--- + +## Next Up + +Now that we know *what* technical writing is, the next step is the most critical: understanding **who** you're writing for. \ No newline at end of file diff --git a/docs/technical-writer/resources/books-and-courses.mdx b/docs/technical-writer/resources/books-and-courses.mdx new file mode 100644 index 0000000..e345ed2 --- /dev/null +++ b/docs/technical-writer/resources/books-and-courses.mdx @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/technical-writer/resources/communities-and-blogs.mdx b/docs/technical-writer/resources/communities-and-blogs.mdx new file mode 100644 index 0000000..e345ed2 --- /dev/null +++ b/docs/technical-writer/resources/communities-and-blogs.mdx @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/technical-writer/resources/portfolio-building.mdx b/docs/technical-writer/resources/portfolio-building.mdx new file mode 100644 index 0000000..e345ed2 --- /dev/null +++ b/docs/technical-writer/resources/portfolio-building.mdx @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/technical-writer/resources/templates-and-samples.mdx b/docs/technical-writer/resources/templates-and-samples.mdx new file mode 100644 index 0000000..e345ed2 --- /dev/null +++ b/docs/technical-writer/resources/templates-and-samples.mdx @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/technical-writer/tools/docs-platforms.mdx b/docs/technical-writer/tools/docs-platforms.mdx new file mode 100644 index 0000000..e345ed2 --- /dev/null +++ b/docs/technical-writer/tools/docs-platforms.mdx @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/technical-writer/tools/markdown-basics.mdx b/docs/technical-writer/tools/markdown-basics.mdx new file mode 100644 index 0000000..e345ed2 --- /dev/null +++ b/docs/technical-writer/tools/markdown-basics.mdx @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/technical-writer/tools/style-guides.mdx b/docs/technical-writer/tools/style-guides.mdx new file mode 100644 index 0000000..e345ed2 --- /dev/null +++ b/docs/technical-writer/tools/style-guides.mdx @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/technical-writer/tools/version-control-github.mdx b/docs/technical-writer/tools/version-control-github.mdx new file mode 100644 index 0000000..e345ed2 --- /dev/null +++ b/docs/technical-writer/tools/version-control-github.mdx @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/technical-writer/tools/writing-tools.mdx b/docs/technical-writer/tools/writing-tools.mdx new file mode 100644 index 0000000..e345ed2 --- /dev/null +++ b/docs/technical-writer/tools/writing-tools.mdx @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docusaurus.config.js b/docusaurus.config.js index aa7707e..8c2ff34 100644 --- a/docusaurus.config.js +++ b/docusaurus.config.js @@ -126,52 +126,52 @@ const config = { href: "https://codeharborhub.github.io/", target: "_self", }, - items: [ + items: [ { to: "/tutorial/", html: '📚 Tutorials', - position: "left" + position: "left", }, { to: "/tutorial/category/html/", html: '🧱 HTML', - position: "left" + position: "left", }, { to: "/tutorial/css/introduction/what-is-css/", html: '🎨 CSS', - position: "left" + position: "left", }, { to: "/tutorial/javascript/introduction-to-javascript/what-is-js", html: ' JavaScript', - position: "left" + position: "left", }, { to: "/tutorial/git/introduction", html: '🌳 Git', - position: "left" + position: "left", }, { to: "/tutorial/github/introduction-to-github", html: '🐙 GitHub', - position: "left" + position: "left", }, { to: "/tutorial/react/react-intro", html: '⚛️ React', - position: "left" + position: "left", }, { to: "/tutorial/cybersecurity", html: '🛡️ Cyber Security', - position: "left" + position: "left", }, { to: "https://codeharborhub.github.io/blog", html: '📝 Blog', - position: "right" + position: "right", }, { href: "https://github.com/codeharborhub", @@ -321,7 +321,14 @@ const config = { // theme: prismThemes.vsDark, darkTheme: prismThemes.dracula, // darkTheme: prismThemes.github, - additionalLanguages: ["powershell", "php", "bash", "http"], + additionalLanguages: [ + "powershell", + "php", + "bash", + "http", + "latex", + "markdown", + ], }, docs: { sidebar: { diff --git a/sidebars.ts b/sidebars.ts index 70f23e5..d90ee19 100644 --- a/sidebars.ts +++ b/sidebars.ts @@ -460,11 +460,18 @@ const sidebars: SidebarsConfig = { }, // Internet - { + { type: "link", label: "Internet", href: "/internet/introduction/", }, + // Technical Writer + + { + type: "link", + label: "Technical Writer", + href: "/technical-writer/", + }, ], css: [ @@ -986,6 +993,141 @@ const sidebars: SidebarsConfig = { }, "internet/quiz", ], + + technicalwriter: [ + "technical-writer/index", + { + type: "category", + label: "Introduction to Technical Writing", + link: { + type: "generated-index", + title: "Introduction to Technical Writing", + description: + "Get started with the essentials of technical writing — understand what it is, its importance, types, and the core skills required to become a successful technical writer.", + }, + items: [ + "technical-writer/intro/what-is-technical-writing", + "technical-writer/intro/types-of-technical-writing", + "technical-writer/intro/tools-for-technical-writers", + "technical-writer/intro/best-practices", + "technical-writer/intro/skills-required", + ], + }, + + { + type: "category", + label: "Writing Fundamentals", + link: { + type: "generated-index", + title: "Writing Fundamentals for Technical Writers", + description: + "Master the foundations of effective writing. Learn to identify your audience, craft clear and concise content, and structure your documentation for maximum readability.", + }, + items: [ + "technical-writer/fundamentals/understanding-your-audience", + "technical-writer/fundamentals/writing-style-and-tone", + "technical-writer/fundamentals/document-structure-and-formatting", + "technical-writer/fundamentals/visual-aids-and-graphics", + "technical-writer/fundamentals/review-and-editing", + ], + }, + + { + type: "category", + label: "Documentation Types", + link: { + type: "generated-index", + title: "Documentation Types & Structures", + description: + "Explore the different types of technical documentation — from API references to user guides, release notes, and product manuals. Learn how to plan, structure, and maintain each effectively.", + }, + items: [ + "technical-writer/documentation/api-documentation", + "technical-writer/documentation/software-documentation", + "technical-writer/documentation/user-manuals", + "technical-writer/documentation/technical-reports", + "technical-writer/documentation/release-notes", + ], + }, + + { + type: "category", + label: "Tools & Platforms", + link: { + type: "generated-index", + title: "Documentation Tools and Platforms", + description: + "Discover essential tools and platforms every technical writer should know. From Markdown editors to documentation frameworks and version control systems, this section helps you work efficiently and collaboratively.", + }, + items: [ + "technical-writer/tools/markdown-basics", + "technical-writer/tools/docs-platforms", + "technical-writer/tools/version-control-github", + "technical-writer/tools/writing-tools", + "technical-writer/tools/style-guides", + ], + }, + + { + type: "category", + label: "Advanced Topics", + link: { + type: "generated-index", + title: "Advanced Technical Writing Concepts", + description: + "Go beyond the basics and explore advanced topics like writing for developers, accessibility, localization, SEO for docs, and contributing to open source projects.", + }, + items: [ + "technical-writer/advanced/writing-for-developers", + "technical-writer/advanced/localization-and-accessibility", + "technical-writer/advanced/seo-for-documentation", + "technical-writer/advanced/open-source-contributions", + "technical-writer/advanced/technical-writing-career-path", + ], + }, + + { + type: "category", + label: "Resources & Portfolio", + link: { + type: "generated-index", + title: "Resources and Career Growth", + description: + "Access curated resources, communities, and templates to improve your writing. Learn how to build an impressive portfolio, find freelance opportunities, and advance in your technical writing career.", + }, + items: [ + "technical-writer/resources/books-and-courses", + "technical-writer/resources/communities-and-blogs", + "technical-writer/resources/templates-and-samples", + "technical-writer/resources/portfolio-building", + ], + }, + + // { + // type: "category", + // label: "Projects & Practice", + // link: { + // type: "generated-index", + // title: "Hands-on Projects for Technical Writers", + // description: + // "Put your learning into practice with real-world documentation projects. Learn to create sample API docs, improve open-source documentation, and build your own docs site using Docusaurus or MkDocs.", + // }, + // items: [ + // "technical-writer/projects/create-sample-api-docs", + // "technical-writer/projects/write-readme-for-open-source", + // "technical-writer/projects/build-docs-site-with-docusaurus", + // "technical-writer/projects/edit-existing-docs", + // "technical-writer/projects/document-a-demo-project", + // ], + // }, + + // { + // type: "category", + // label: "Roadmap", + // link: { type: "doc", id: "technical-writer/roadmap" }, + // items: [], + // }, + ], }; export default sidebars; diff --git a/src/components/AudiencePersona.tsx b/src/components/AudiencePersona.tsx new file mode 100644 index 0000000..ca9c5b3 --- /dev/null +++ b/src/components/AudiencePersona.tsx @@ -0,0 +1,87 @@ +import React from 'react'; +import { FaUserTag, FaBrain, FaThLarge, FaRegFrownOpen } from 'react-icons/fa'; +import { GiTechnoHeart } from 'react-icons/gi'; // A fun icon for 'Needs' + +interface AudiencePersonaProps { + name: string; + role: string; + expertise: 'Low' | 'Medium' | 'High'; + goal: string; + painpoint: string; + needs: string; +} + +const AudiencePersona: React.FC = ({ name, role, expertise, goal, painpoint, needs }) => { + + // Helper to color the expertise badge + const expertiseColor = (level: string) => { + switch (level) { + case 'High': + return 'bg-green-100 text-green-700 dark:bg-green-900/50 dark:text-green-400'; + case 'Medium': + return 'bg-yellow-100 text-yellow-700 dark:bg-yellow-900/50 dark:text-yellow-400'; + case 'Low': + return 'bg-red-100 text-red-700 dark:bg-red-900/50 dark:text-red-400'; + default: + return 'bg-gray-100 text-gray-700 dark:bg-gray-700 dark:text-gray-300'; + } + }; + + return ( +
+ + {/* Header Section */} +
+
+

{name}

+

{role}

+
+ + {expertise} Expertise + +
+ + {/* Detail Grid */} +
+ + {/* Goal */} +
+ +
+

Goal

+

{goal}

+
+
+ + {/* Pain Point */} +
+ +
+

Pain Point

+

{painpoint}

+
+
+ + {/* Needs */} +
+ +
+

Documentation Needs

+

{needs}

+
+
+ +
+
+ ); +}; + +export default AudiencePersona; \ No newline at end of file diff --git a/src/components/AuthorProfile.jsx b/src/components/AuthorProfile.jsx new file mode 100644 index 0000000..fa5c320 --- /dev/null +++ b/src/components/AuthorProfile.jsx @@ -0,0 +1,229 @@ +import React, { useEffect, useState } from "react"; +import { + Twitter, + Linkedin, + Mail, + Share2, + Copy, + Github, + Loader2, + MessageCircle, +} from "lucide-react"; + +/** + * AuthorProfile + * A responsive two-column author profile component for tutorial pages. + * - Left column: GitHub contributor image, name, short bio + * - Right column: Social share icons (Twitter, LinkedIn, WhatsApp, Email), copy link + * + * Props: + * - username: (string) GitHub username to fetch avatar and profile URL. Optional. + * - name: (string) Fallback / display name. + * - bio: (string) Short author bio. + * - url: (string) The tutorial URL to share. Defaults to window.location.href when available. + * - className: (string) Extra classes for the container. + * + * Example usage: + * + */ + +const PlaceholderAvatar = ({ className = "w-20 h-20 rounded-full" }) => ( +
+ +
+); + +export default function AuthorProfile({ + username, + name, + bio, + url, + className = "", +}) { + const [avatarUrl, setAvatarUrl] = useState(null); + const [profileUrl, setProfileUrl] = useState(null); + const [loading, setLoading] = useState(Boolean(username)); + + useEffect(() => { + let cancelled = false; + async function fetchGitHub() { + if (!username) return setLoading(false); + setLoading(true); + try { + const res = await fetch( + `https://api.github.com/users/${encodeURIComponent(username)}` + ); + if (!res.ok) throw new Error("GitHub user not found"); + const data = await res.json(); + if (!cancelled) { + setAvatarUrl(data.avatar_url); + setProfileUrl(data.html_url); + } + } catch (err) { + // silently fallback to initials/avatar placeholder + console.warn("AuthorProfile: couldn't fetch GitHub user", err.message); + setAvatarUrl(null); + setProfileUrl(null); + } finally { + if (!cancelled) setLoading(false); + } + } + fetchGitHub(); + return () => (cancelled = true); + }, [username]); + + const pageUrl = + typeof url === "string" + ? url + : typeof window !== "undefined" + ? window.location.href + : ""; + + function shareOnTwitter() { + const text = encodeURIComponent( + `${name || username || "Check this tutorial"}` + ); + const share = `https://twitter.com/intent/tweet?text=${text}&url=${encodeURIComponent( + pageUrl + )}`; + window.open(share, "_blank", "noopener,noreferrer"); + } + + function shareOnLinkedIn() { + const share = `https://www.linkedin.com/sharing/share-offsite/?url=${encodeURIComponent( + pageUrl + )}`; + window.open(share, "_blank", "noopener,noreferrer"); + } + + function shareOnWhatsApp() { + const text = encodeURIComponent(`${name || "Tutorial"} - ${pageUrl}`); + const share = `https://wa.me/?text=${text}`; + window.open(share, "_blank", "noopener,noreferrer"); + } + + function shareByEmail() { + const subject = encodeURIComponent(`${name || "Tutorial"}`); + const body = encodeURIComponent( + `I thought you might find this useful: ${pageUrl}` + ); + window.location.href = `mailto:?subject=${subject}&body=${body}`; + } + + async function copyLink() { + try { + await navigator.clipboard.writeText(pageUrl); + // subtle feedback: use alert for simplicity (you can replace with a toast system) + alert("Link copied to clipboard"); + } catch (e) { + // fallback: select text input + prompt("Copy the link:", pageUrl); + } + } + + return ( +
+
+ {/* LEFT: avatar + name + bio */} +
+
+ {loading ? ( +
+ +
+ ) : avatarUrl ? ( + + {`${name + + ) : ( + + )} +
+ +
+

+ {name || username || "Author"}{" "} + {username && ( + + + + )} +

+ +

+ {bio || "No bio available."} +

+
+
+ + {/* RIGHT: social icons */} +
+
+ + + + + + + + + +
+
+
+
+ ); +} diff --git a/src/components/SkillCard.tsx b/src/components/SkillCard.tsx new file mode 100644 index 0000000..5889019 --- /dev/null +++ b/src/components/SkillCard.tsx @@ -0,0 +1,83 @@ +import React from "react"; +import { + FaCode, + FaTerminal, + FaHandHoldingHeart, + FaGitAlt, + FaBookOpen, +} from "react-icons/fa"; +import { BsBoxes, BsShuffle } from "react-icons/bs"; + +interface SkillCardProps { + title: string; + description: string; + icon: + | "code" + | "terminal" + | "hand-heart" + | "git" + | "boxes" + | "shuffle" + | "book-open"; +} + +const IconMapper = ({ name }: { name: SkillCardProps["icon"] }) => { + switch (name) { + case "code": + return ; + case "terminal": + return ; + case "hand-heart": + return ; + case "git": + return ; + case "boxes": + return ; + case "shuffle": + return ; + case "book-open": + return ; + default: + return ; + } +}; + +const SkillCard: React.FC = ({ title, description, icon }) => { + return ( +
+
+
+ +
+

+ {title} +

+
+

+ {description} +

+
+ ); +}; + +export default SkillCard; diff --git a/src/components/ToolCard.module.css b/src/components/ToolCard.module.css new file mode 100644 index 0000000..943b34d --- /dev/null +++ b/src/components/ToolCard.module.css @@ -0,0 +1,69 @@ +/* + * ToolCard.module.css + * Styles for the custom component. + */ + +/* Main card container styling */ +.toolCardContainer { + /* Margin at the bottom for spacing when stacked */ + margin-bottom: 24px; + /* Subtle box shadow for lift and distinction */ + box-shadow: var(--ifm-color-gray-300) 0px 4px 6px -1px, var(--ifm-color-gray-200) 0px 2px 4px -2px; + /* Add a border to highlight it more */ + border-left: 5px solid var(--ifm-color-primary); +} + +/* Tool Name Header Styling */ +.toolCardHeader { + background-color: var(--ifm-color-emphasis-100); /* Light background for the header */ + padding: 1rem; +} + +.toolCardHeader h3 { + /* Use the primary color for the tool name */ + color: var(--ifm-color-primary); + margin: 0; +} + +/* Description text styling */ +.descriptionText { + font-size: 1em; + color: var(--ifm-font-color-base); +} + +/* Use Case Section Styling */ +.useCaseSection { + margin-top: 1rem; + padding-top: 0.5rem; + border-top: 1px dashed var(--ifm-color-emphasis-300); +} + +.useCaseTitle { + font-weight: 700; + color: var(--ifm-color-primary-dark); + font-size: 0.9em; + margin-bottom: 0.3rem; +} + +.useCaseText { + font-size: 0.95em; + /* Slightly muted text for the use case details */ + color: var(--ifm-font-color-base); +} + +/* Dark Theme Adjustments */ +/* Docusaurus handles dark mode inversion for most colors, + but we can fine-tune the background and shadows */ +:root:global(.dark) .toolCardContainer { + border-left: 5px solid var(--ifm-color-primary-light); /* Lighter border in dark mode */ + box-shadow: none; /* Dark mode often looks cleaner without box shadow */ + background-color: var(--ifm-background-surface-color); +} + +:root:global(.dark) .toolCardHeader { + background-color: var(--ifm-color-emphasis-200); +} + +:root:global(.dark) .useCaseSection { + border-top: 1px dashed var(--ifm-color-emphasis-400); +} \ No newline at end of file diff --git a/src/components/ToolCard.tsx b/src/components/ToolCard.tsx new file mode 100644 index 0000000..6159f71 --- /dev/null +++ b/src/components/ToolCard.tsx @@ -0,0 +1,57 @@ +import React, { ReactNode } from 'react'; +import clsx from 'clsx'; +import styles from './ToolCard.module.css'; + +// Define the properties (props) that the ToolCard component accepts +interface ToolCardProps { + name: string; + description: string; + useCase: ReactNode; // Use ReactNode to allow rich content (like or ) +} + +/** + * A reusable card component to display an essential tool for technical writers. + * Designed to be visually distinct and easily scannable within the documentation. + */ +export default function ToolCard({ + name, + description, + useCase, +}: ToolCardProps): JSX.Element { + return ( +
+ {/* Card Header for the Tool Name */} +
+

{name}

+
+ + {/* Card Body for Description and Use Case */} +
+ {/* Description Section */} +

+ {description} +

+ + {/* Use Case/Why it matters Section */} +
+

+ Use Case / Why it Matters: +

+

+ {useCase} +

+
+
+
+ ); +} + + +// How to use the ToolCard component: +/* + +*/ \ No newline at end of file diff --git a/src/theme/MDXComponents.js b/src/theme/MDXComponents.js index 3cba36c..8086158 100644 --- a/src/theme/MDXComponents.js +++ b/src/theme/MDXComponents.js @@ -13,6 +13,9 @@ import LiteYouTubeEmbed from "react-lite-youtube-embed"; import DocsCard from '@site/src/components/DocsCard'; import DocsCards from '@site/src/components/DocsCards'; import ComingSoon from '@site/src/components/ComingSoon'; +import AuthorProfile from '@site/src/components/AuthorProfile'; +import Link from '@docusaurus/Link'; +import ToolCard from '@site/src/components/ToolCard'; export default { // Re-use the default mapping @@ -29,4 +32,7 @@ export default { DocsCard, DocsCards, ComingSoon, + Link, + AuthorProfile, + ToolCard }; diff --git a/static/img/tutorials/technical-writer/audience-cover.png b/static/img/tutorials/technical-writer/audience-cover.png new file mode 100644 index 0000000..2644ace Binary files /dev/null and b/static/img/tutorials/technical-writer/audience-cover.png differ diff --git a/static/img/tutorials/technical-writer/best-practices.png b/static/img/tutorials/technical-writer/best-practices.png new file mode 100644 index 0000000..17fdb94 Binary files /dev/null and b/static/img/tutorials/technical-writer/best-practices.png differ diff --git a/static/img/tutorials/technical-writer/skills-required-cover.png b/static/img/tutorials/technical-writer/skills-required-cover.png new file mode 100644 index 0000000..fc45666 Binary files /dev/null and b/static/img/tutorials/technical-writer/skills-required-cover.png differ diff --git a/static/img/tutorials/technical-writer/style-and-tone-cover.png b/static/img/tutorials/technical-writer/style-and-tone-cover.png new file mode 100644 index 0000000..cf99a43 Binary files /dev/null and b/static/img/tutorials/technical-writer/style-and-tone-cover.png differ diff --git a/static/img/tutorials/technical-writer/technical-writer-cover.png b/static/img/tutorials/technical-writer/technical-writer-cover.png new file mode 100644 index 0000000..d95a716 Binary files /dev/null and b/static/img/tutorials/technical-writer/technical-writer-cover.png differ diff --git a/static/img/tutorials/technical-writer/tools-for-technical-writers.png b/static/img/tutorials/technical-writer/tools-for-technical-writers.png new file mode 100644 index 0000000..1dd3e37 Binary files /dev/null and b/static/img/tutorials/technical-writer/tools-for-technical-writers.png differ diff --git a/static/img/tutorials/technical-writer/types-of-technical-writing-cover.png b/static/img/tutorials/technical-writer/types-of-technical-writing-cover.png new file mode 100644 index 0000000..03b9681 Binary files /dev/null and b/static/img/tutorials/technical-writer/types-of-technical-writing-cover.png differ