A comprehensive, interactive web-based learning platform for programming fundamentals, robotics development, and competitive coding. Designed for FTC (FIRST Tech Challenge), FRC (FIRST Robotics Competition) teams, and programming enthusiasts.
- Multi-Section Learning: Five comprehensive training tracks
- Interactive Navigation: Hierarchical content with collapsible groups and tier-based organization
- Robotics-Focused: Real-world examples from FTC and FRC competitions
- Competitive Coding: Complete curriculum from beginner to LeetCode master
- Modern UI: Professional theme with dark/light mode toggle
- Mobile Responsive: Works seamlessly on all devices
- Search Functionality: Global search across all content with Ctrl+K shortcut
- Exercise System: Interactive practice problems with show/hide answers
- Modular Architecture: Clean, maintainable codebase with separation of concerns
The platform uses a modular, class-based architecture with clear separation of concerns:
Application
βββ AppState (Global State Management)
βββ ConfigManager (Configuration Loading & Caching)
βββ ContentManager (Content Loading & Rendering)
βββ NavigationManager (Navigation & Routing)
βββ ThemeManager (Theme Switching)
βββ SearchManager (Global Search)
βββ EventManager (Event Handling)
βββ SidebarResizeManager (UI Responsiveness)
- Single Responsibility: Each class has one clear purpose
- Dependency Injection: Managers are injected where needed
- State Management: Centralized state in AppState class
- Error Handling: Comprehensive error handling throughout
- Caching: Config and content caching for performance
- Modularity: Easy to extend and maintain
- Progressive Enhancement: Works without JavaScript for basic functionality
- Platform overview and navigation guide
- Quick start information for all sections
From zero to confident Java programmer
- Java Basics: Variables, data types, arrays, calculations
- Programming Logic: Conditionals, methods, control structures, exception handling
- Loops: While loops, for loops, loop control, best practices
- Object-Oriented Programming: Classes, objects, references, overloading
Complete FTC robotics programming curriculum
- Beginner Tier: OnBot Java setup, basic drivetrain, gamepad control, sensors, simple autonomous, mechanisms
- Intermediate Tier: Android Studio intro, OnBot vs Android Studio, Git & version control, command-based programming, PedroPathing
- Advanced Tier: Advanced command-based programming, advanced PedroPathing, computer vision
Professional FRC robotics development
- FRC Basics: WPILib framework, motor control, commands & subsystems
- Advanced Features: Command-based programming, PID control systems
From beginner to LeetCode master
- Phase 1: Foundation: Problem-solving framework, time complexity, Big O notation
- Phase 2: Data Structures: Arrays, linked lists, trees, graphs, heaps, hash tables
- Phase 3: Core Algorithms: Sorting, searching, two pointers, sliding window, binary search, dynamic programming, greedy algorithms
- Phase 4: Advanced Techniques: Advanced DP, backtracking, union-find, tries, segment trees, bit manipulation
- Phase 5: LeetCode Mastery: Problem patterns, optimization, interview prep, contest strategies, advanced problem solving
-
Install Node.js
- Download and install Node.js from nodejs.org.
- This will also install npm (Node Package Manager).
-
Install Dependencies
- Open a terminal in the project root directory.
- Run:
npm install
- This will install any required dependencies (if
package.json
is present).
-
Start the Local Server
- Run:
npx http-server -p 8000 -c-1
- If you prefer, you can install
http-server
globally:npm install -g http-server http-server -p 8000 -c-1
- Alternatively, if a script is provided in
package.json
, you can use:(Checknpm start
package.json
for available scripts.)
- Run:
-
Open the App
- Visit http://localhost:8000/ in your browser.
- If you get a 'command not found' error for
http-server
, ensure you have installed it globally or usenpx http-server
. - If port 8000 is in use, change the port number (e.g.,
-p 8080
). - For Windows users, use PowerShell or Command Prompt in the project directory.
If you have Python installed, you can also run:
python -m http.server 8000
- Right-click
index.html
β "Open with Live Server"
- Push your code to a GitHub repository
- Go to Settings β Pages
- Select "Deploy from a branch" β "main" β "/ (root)"
- Your site will be available at:
https://YOUR_USERNAME.github.io/REPO_NAME/
- Visit netlify.com
- Drag the project folder to deploy
- Get instant URL with optional custom domain
- Frontend: Pure HTML5, CSS3, JavaScript (ES6+)
- Architecture: Modular class-based architecture with dependency injection
- State Management: Centralized state management with AppState class
- Data: JSON-based content management system with modular configs
- Styling: Custom CSS with CSS Grid and Flexbox
- Theme: Furo documentation theme adaptation
- Icons: Custom SVG icons and emoji
- No Build Process: Pure vanilla JavaScript for simplicity
swyftnav/
βββ index.html # Main application entry point
βββ styles.css # Main stylesheet with theme system
βββ js/ # Modular JavaScript architecture
β βββ app-state.js # Global state management
β βββ config-manager.js # Configuration loading & caching
β βββ content-manager.js # Content loading & rendering
β βββ navigation-manager.js # Navigation & routing
β βββ theme-manager.js # Theme switching
β βββ search-manager.js # Global search functionality
β βββ sidebar-resize-manager.js # UI responsiveness
β βββ event-manager.js # Event handling
β βββ application.js # Main application coordination
β βββ global-functions.js # HTML integration functions
β βββ main.js # Module loading documentation
βββ data/ # Content organization
β βββ config/ # Configuration files
β β βββ config.json # Main navigation configuration
β β βββ homepage.json # Home page content
β β βββ java-training-config.json # Java section config
β β βββ ftc-specific-config.json # FTC section config (tiers structure)
β β βββ frc-specific-config.json # FRC section config
β β βββ competitive-training-config.json # Competitive section config
β βββ java/ # Java training content
β β βββ java-basics/ # Basic Java concepts
β β βββ java-loops/ # Loop structures
β β βββ java-oop/ # Object-oriented programming
β β βββ java-programming-logic/ # Programming logic
β βββ ftc/ # FTC training content
β β βββ onbot-java/ # OnBot Java development
β β βββ android-studio/ # Android Studio development
β βββ frc/ # FRC training content
β β βββ beginner/ # Beginner FRC concepts
β β βββ intermediate/ # Intermediate FRC concepts
β β βββ advanced/ # Advanced FRC concepts
β βββ comp/ # Competitive coding content
β βββ foundation/ # Problem-solving foundation
β βββ data-structures/ # Data structures
β βββ algorithms/ # Core algorithms
β βββ strategies/ # Problem-solving strategies
β βββ advanced/ # Advanced techniques
βββ media/ # Images and icons
βββ README.md # This file
The platform supports two main navigation structures:
{
"title": "Section Title",
"groups": [
{
"id": "group-id",
"label": "Group Label",
"items": [
{
"id": "item-id",
"label": "Item Label",
"file": "data/section/item.json"
}
]
}
]
}
{
"title": "Section Title",
"tiers": [
{
"id": "tier-id",
"title": "Tier Title",
"description": "Tier description",
"lessons": [
"tier/lesson-file.json",
"tier/another-lesson.json"
]
}
]
}
All content files follow a standardized JSON format:
{
"title": "Page Title",
"sections": [
{
"type": "text",
"title": "Section Title",
"content": "HTML content with <strong>formatting</strong>"
},
{
"type": "code",
"title": "Code Example",
"content": "Code Explanation",
"code": "public class Example {\n // Code here\n}"
},
{
"type": "table",
"title": "Comparison Table",
"headers": ["Feature", "Option A", "Option B"],
"rows": [
["Speed", "Fast", "Slow"],
["Memory", "Low", "High"],
["Complexity", "Simple", "Complex"]
]
},
{
"type": "exercise-box",
"title": "Practice Exercise",
"description": "Exercise description",
"tasks": [
"Task 1",
"Task 2"
],
"content": "// Example code"
}
]
}
text
: Regular paragraphs with HTML formattingcode
: Syntax-highlighted code blocksrules-box
: Important rules and guidelinesexercise-box
: Interactive practice problemslist
: Key points and bullet listsemphasis-box
: Important information highlightsdata-types-grid
: Interactive data type comparisonslogical-operators
: Operator reference tableslink-grid
: Navigation to related topicstable
: Structured data tables with headers and rows
Create a new JSON file in the appropriate section folder following the content structure above.
Add the new content to the corresponding section config file:
For Groups Structure:
{
"id": "new-item",
"label": "New Item Label",
"file": "data/section/new-item.json"
}
For Tiers Structure:
{
"lessons": [
"existing-lesson.json",
"new-lesson.json" // Add your new lesson
]
}
- Files:
[section-prefix]-[descriptive-name].json
- IDs:
[section-prefix]-[descriptive-name]
- Labels: Human-readable, descriptive titles
Create a new config file in data/config/
:
{
"title": "New Section Title",
"groups": [
{
"id": "main-group",
"label": "Main Group",
"items": [
{
"id": "intro",
"label": "Introduction",
"file": "data/new-section/intro.json"
}
]
}
]
}
Update data/config/config.json
:
{
"sections": {
"new-section": {
"id": "new-section",
"label": "New Section",
"file": "data/config/new-section-config.json"
}
}
}
Create a folder in data/
for your section content.
- Add Renderer Method in
ContentManager
:
renderNewType(container, data) {
// Your rendering logic here
}
- Register in renderSection Method:
const renderers = {
'new-type': this.renderNewType.bind(this),
// ... existing renderers
};
- Create Manager Class:
class NewManager {
constructor() {
// Initialize
}
// Your methods
}
- Integrate with Application:
class Application {
constructor() {
this.newManager = new NewManager();
// ... other managers
}
}
The theme system uses CSS custom properties for easy customization:
:root {
--color-background: #ffffff;
--color-text: #000000;
--color-sidebar-background: #f8f9fa;
/* ... more properties */
}
[data-theme="dark"] {
--color-background: #1a1a1a;
--color-text: #ffffff;
--color-sidebar-background: #2d2d2d;
/* ... dark theme overrides */
}
- Add theme variables to
:root
- Create theme variant in
[data-theme="theme-name"]
- Update
ThemeManager
to support the new theme
- Real-time Search: Instant results as you type
- Multi-section Search: Searches across all loaded content
- Content Types: Searches titles, content, and code
- Keyboard Shortcut: Ctrl+K to focus search
- Result Highlighting: Search terms highlighted in results
The search system automatically loads all sections when needed and provides comprehensive results across all content types.
- All sections load correctly
- Navigation works on all devices
- Search functionality works
- Theme switching works
- Content renders properly
- Error handling works
- Performance is acceptable
- Sidebar resizing works
- State persistence works
- Chrome (recommended)
- Firefox
- Safari
- Edge
- Lazy Loading: Content loaded only when needed
- Caching: Config and content cached in memory
- Minimal Dependencies: Pure vanilla JavaScript
- Efficient DOM Updates: Minimal re-renders
- State Persistence: Local storage for user preferences
- Service Worker: For offline functionality
- Content Preloading: For frequently accessed content
- Image Optimization: WebP format for images
- Code Splitting: If moving to a build system
- Fork the repository
- Create a feature branch
- Follow the architecture patterns
- Test thoroughly
- Submit a pull request
- ES6+: Use modern JavaScript features
- Class-based: Follow the established architecture
- Error Handling: Always include proper error handling
- Documentation: Comment complex logic
- Naming: Use descriptive, consistent naming
- Educational Focus: Keep content educational and practical
- Robotics Context: Include robotics examples where relevant
- Progressive Difficulty: Build from simple to complex
- Interactive Elements: Include exercises and examples
- Consistent Format: Follow established content structure
Created for comprehensive programming and robotics education, covering:
- FTC Teams: Learning Java for robot programming with OnBot Java and Android Studio
- FRC Teams: Professional robotics development with WPILib and command-based programming
- Programming Students: Java fundamentals with practical applications
- Competitive Programmers: Algorithm and data structure mastery
- Educators: Teaching programming with robotics and competitive contexts
- Beginner: Start with Java basics, progress through robotics applications
- Intermediate: Advanced programming concepts with real-world robotics scenarios
- Advanced: Competitive coding techniques and optimization strategies
Perfect for:
- Robotics teams learning programming fundamentals
- Computer science students needing practical examples
- Educators teaching programming with real-world context
- Self-learners wanting comprehensive programming education
- Competitive programming enthusiasts building problem-solving skills
If migrating from the previous architecture:
- Content Files: No changes needed - same JSON structure
- Configuration: Update to new config structure if using custom sections
- Custom Code: Update to use new manager classes
- Event Handlers: Update to use new navigation system
- Navigation system completely rewritten
- State management centralized
- Error handling improved
- Performance optimizations added
- Modular JavaScript architecture implemented
For questions, issues, or contributions:
- Check existing issues on GitHub
- Create a new issue with detailed description
- Follow the contribution guidelines
- Test thoroughly before submitting
This project contains content that was generated or assisted by artificial intelligence (AI) systems. The educational content, code examples, and documentation were created with the assistance of AI tools. While AI was used in the creation process, the final content has been reviewed and curated for educational purposes.
- Educational Use: This content is provided for educational purposes only
- No Warranty: The content is provided "as is" without any warranties
- Fair Use: Users may use this content for personal learning and educational purposes
- Attribution: When using or referencing this content, please attribute to "SwyftNav"
This project does not claim copyright over AI-generated content. The content is intended for educational use and should be used in accordance with fair use principles. Users are responsible for ensuring their use complies with applicable laws and regulations.
When contributing to this project, please ensure that any new content you add is either:
- Your original work
- Properly licensed content
- Content you have the right to use and distribute
For questions about licensing or usage, please contact the project maintainers.