Module Creation Guide
This comprehensive guide will help you create interactive training modules for the FreeOSINT platform using JSON format. You can either use the visual Module Creator tool or directly create JSON files following this specification.
Overview
FreeOSINT modules are structured as JSON files that define both content and interactive elements. Each module consists of:
- Metadata: Basic information about the module (title, description, etc.)
- Sections: The content and interactive elements that make up the module
JSON Structure
Here's the basic structure of a module JSON file:
{
"id": "module-id",
"title": "Module Title",
"description": "A brief description of the module",
"difficulty": "Beginner|Intermediate|Advanced",
"duration": 60,
"image": "images/module-image.jpg",
"featured": true,
"tags": ["tag1", "tag2", "tag3"],
"sections": [
// Array of section objects
]
}
Module Properties
Property | Type | Description | Required |
---|---|---|---|
id |
String | Unique identifier for the module (use kebab-case) | Yes |
title |
String | Display title of the module | Yes |
description |
String | Brief description of the module content | Yes |
difficulty |
String | Difficulty level (Beginner, Intermediate, Advanced) | Yes |
duration |
Number | Estimated time to complete in minutes | Yes |
image |
String | Path to the module's cover image | Yes |
featured |
Boolean | Whether to feature this module on the homepage | No |
tags |
Array | Keywords related to the module content | No |
sections |
Array | Array of section objects that make up the module | Yes |
Section Types
Modules can contain various types of sections, from simple content to interactive exercises. Each section type has its own structure.
Content Section
Basic content sections display text, images, and other HTML content.
{
"title": "Section Title",
"content": "HTML content goes here. You can use any valid HTML.
"
}
Enhanced Content Elements
You can use special tags in your content to create enhanced visual elements:
[warning]Warning text here[/warning]
- Displays a warning box[tip]Helpful tip here[/tip]
- Displays a tip box[note]Important note here[/note]
- Displays a note box[important]Critical information here[/important]
- Displays an important box[example]Example content here[/example]
- Displays an example box[quote]Quotation here[/quote]
- Displays a quote box[code language="javascript"]Your code here[/code]
- Displays formatted code
Quiz Section (Multiple Choice)
Multiple choice questions with single correct answers.
{
"title": "Quiz Title",
"type": "quiz",
"question": "What is the question text?",
"options": [
"Option 1",
"Option 2",
"Option 3",
"Option 4"
],
"correctAnswer": "Option 2",
"explanation": "Explanation of why this answer is correct",
"shuffle": true,
"points": 10
}
Fill in the Blanks Section
Text with blanks that users need to fill in.
{
"title": "Fill in the Blanks Title",
"type": "fill-blanks",
"instruction": "Fill in the blanks to complete the text:",
"text": "This is a [blank] with some [blank] to fill in.",
"blanks": ["word", "spaces"],
"acceptableAnswers": [
["word", "term"],
["spaces", "blanks", "gaps"]
],
"successMessage": "Great job! You've filled in all blanks correctly.",
"incorrectMessage": "Some answers need revision. Try again!",
"hints": ["Think about what goes in empty areas", "Consider synonyms"],
"points": 15
}
Matching Section
Interactive exercise where users match items from two columns.
{
"title": "Matching Exercise Title",
"type": "matching",
"instruction": "Match each term with its correct definition:",
"pairs": [
{
"term": "Term 1",
"definition": "Definition 1"
},
{
"term": "Term 2",
"definition": "Definition 2"
},
{
"term": "Term 3",
"definition": "Definition 3"
}
],
"successMessage": "Great job! You've correctly matched all items.",
"incorrectMessage": "Some matches are incorrect. Try again!",
"hints": ["Look for related concepts", "Consider the definitions carefully"],
"points": 20
}
Code Exercise Section
Interactive coding exercise where users write or modify code.
{
"title": "Code Exercise Title",
"type": "code",
"instruction": "Complete the following code:",
"codeTemplate": "function example() {\n // Your code here\n}",
"codeExample": "// Example:\nfunction sample() {\n return 'Hello World';\n}",
"requiredElements": ["return", "console.log"],
"successMessage": "Your code looks good! Well done.",
"incorrectMessage": "Your code is missing some required elements.",
"points": 25
}
True/False Section
Simple true or false questions.
{
"title": "True/False Question",
"type": "true-false",
"question": "Is this statement true or false?",
"correctAnswer": true,
"explanation": "Explanation of why this is true/false",
"points": 5
}
Best Practices
Content Structure
- Start with an introduction section that outlines learning objectives
- Alternate between content and interactive sections
- Use headings and formatting to break up long text
- End with a summary or conclusion section
- Include 5-10 sections per module for optimal length
Interactive Elements
- Include at least 3-5 interactive elements per module
- Vary the types of interactive elements
- Make questions challenging but fair
- Provide helpful feedback for incorrect answers
- Use hints to guide users without giving away answers
Complete Example
Here's a simplified example of a complete module JSON:
{
"id": "search-techniques",
"title": "Advanced Search Techniques",
"description": "Learn how to use advanced search operators and techniques to find specific information online.",
"difficulty": "Beginner",
"duration": 30,
"image": "images/search-techniques.jpg",
"featured": true,
"tags": ["search", "google", "operators"],
"sections": [
{
"title": "Introduction to Advanced Search",
"content": "This module will teach you how to go beyond basic search queries to find exactly what you're looking for online.
By the end of this module, you'll be able to:
- Use advanced search operators
- Construct complex search queries
- Find specific file types
- Search within specific websites
- Exclude irrelevant results
"
},
{
"title": "Basic Search Operators",
"content": "Let's start with some fundamental search operators that work in most search engines:
[important]Search operators are special commands that modify how a search engine looks for information.[/important]Common Operators
- Quotation marks (\"\"): Search for an exact phrase
- Minus sign (-): Exclude a term from results
- OR: Find results containing either term
- site: Search within a specific website
[example]To find information about python (the programming language) but exclude results about snakes:
python programming -snake
[/example]"
},
{
"title": "Search Operator Quiz",
"type": "quiz",
"question": "Which search operator would you use to find results containing exactly the phrase 'open source intelligence'?",
"options": [
"open source intelligence",
"\"open source intelligence\"",
"site:open source intelligence",
"+open +source +intelligence"
],
"correctAnswer": "\"open source intelligence\"",
"explanation": "Quotation marks (\"\") are used to search for an exact phrase, ensuring the words appear together in that specific order.",
"shuffle": true,
"points": 10
},
{
"title": "Advanced Operators",
"content": "Now let's explore some more advanced search operators:
[note]These operators may work differently across different search engines. We'll focus on Google search operators here.[/note]- filetype: Find specific file types (e.g., PDF, DOCX)
- intitle: Find pages with specific words in the title
- inurl: Find pages with specific words in the URL
- intext: Find pages with specific words in the content
- related: Find sites related to a specified domain
[tip]Combine multiple operators for more powerful searches. For example: intitle:cybersecurity filetype:pdf site:edu
will find PDF files about cybersecurity from educational institutions.[/tip]"
},
{
"title": "Operator Matching Exercise",
"type": "matching",
"instruction": "Match each search operator with its correct function:",
"pairs": [
{
"term": "filetype:pdf",
"definition": "Find PDF documents"
},
{
"term": "intitle:security",
"definition": "Find pages with 'security' in the title"
},
{
"term": "site:gov",
"definition": "Search only government websites"
},
{
"term": "-commercial",
"definition": "Exclude pages containing the word 'commercial'"
},
{
"term": "\"exact phrase\"",
"definition": "Find the exact sequence of words"
}
],
"successMessage": "Excellent! You've correctly matched all search operators with their functions.",
"incorrectMessage": "Some matches are incorrect. Review the operators and try again.",
"hints": ["Think about what each symbol or keyword might indicate", "Consider what part of a webpage or file each operator might target"],
"points": 15
},
{
"title": "Constructing Complex Queries",
"content": "Complex search queries combine multiple operators to narrow down results precisely.
[warning]Be careful not to make queries too complex. If you use too many operators, you might exclude relevant results.[/warning]Query Construction Process
- Start with your basic keywords
- Add operators to refine by source (site:)
- Specify content type (filetype:)
- Add location requirements (intitle:, inurl:, etc.)
- Exclude irrelevant terms (-)
[code language=\"text\"]Example complex query:
cybersecurity threats filetype:pdf site:gov intitle:report -\"job posting\" 2023..2024[/code]This query would find PDF reports about cybersecurity threats from government websites with 'report' in the title, excluding job postings, from 2023-2024.
"
},
{
"title": "Query Building Exercise",
"type": "fill-blanks",
"instruction": "Fill in the blanks to create effective search queries for each scenario:",
"text": "1. To find PDF files about climate change from educational institutions: climate change [blank]:pdf [blank]:edu\n\n2. To find exact information about the Apollo 11 mission excluding moon landing conspiracy theories: \"[blank]\" -[blank]\n\n3. To find pages with 'cybersecurity' in the title from the last year: [blank]:cybersecurity [blank]:2023",
"blanks": ["filetype", "site", "Apollo 11 mission", "conspiracy", "intitle", "after"],
"acceptableAnswers": [
["filetype"],
["site"],
["Apollo 11 mission", "Apollo 11"],
["conspiracy", "hoax", "fake"],
["intitle", "allintitle"],
["after", "since"]
],
"successMessage": "Great job! You've created effective search queries for each scenario.",
"incorrectMessage": "Some of your search operators need revision. Check the syntax and try again.",
"hints": ["Think about which operators target specific file types", "Consider which operators limit results to specific domains"],
"points": 20
},
{
"title": "True or False: Search Operators",
"type": "true-false",
"question": "The 'site:' operator can be used to search for content within multiple specific domains at once (e.g., site:edu OR site:gov).",
"correctAnswer": true,
"explanation": "Yes, you can combine the site: operator with OR to search across multiple specific domains simultaneously.",
"points": 5
},
{
"title": "Conclusion",
"content": "Congratulations on completing the Advanced Search Techniques module! You now have the skills to construct powerful search queries that can find exactly what you're looking for.
Key takeaways:
- Search operators help refine and focus your searches
- Combining operators creates powerful, precise queries
- Different operators target different aspects of web content
- Effective searching is about being specific without being too restrictive
Practice these techniques regularly to become more efficient at finding information online.
Next Steps
To build on what you've learned, consider exploring these modules:
- OSINT Tools Overview
- Social Media Investigation
- Deep Web Searching
"
}
]
}
Uploading Your Module
Once you've created your module JSON file:
- Save the file with your module ID as the filename (e.g.,
advanced-search-operators.json
) - Place the file in the
modules/
directory - Add your module to the
modules/index.json
file - Upload any images referenced in your module to the appropriate directory
Important Note
Always validate your JSON before uploading to ensure it's properly formatted. You can use online JSON validators or the built-in validation in the Module Creator tool.
Troubleshooting
Issue | Possible Cause | Solution |
---|---|---|
Module doesn't appear in the list | Module not added to index.json | Add your module metadata to modules/index.json |
JSON parsing error | Invalid JSON format | Validate your JSON using a tool like jsonlint.com |
Interactive elements not working | Missing required properties | Check that all required properties for the section type are included |
Images not displaying | Incorrect image paths | Ensure image paths are relative to the root directory |
HTML content not rendering properly | Unescaped special characters | Escape special characters in HTML content (quotes, etc.) |