| name | neogrid-openscad |
| description | Interpretive guidance for generating OpenSCAD code for NeoGrid drawer divider connectors. This is a HYBRID system - print connectors, buy dividers (MDF, plywood, acrylic). Provides material selection guidance, connector type decisions, and base system integration. Use when generating OpenSCAD files for NeoGrid junction pieces. |
NeoGrid OpenSCAD Code Generation
Generates OpenSCAD code for 3D-printed connectors that join store-bought divider materials (MDF, plywood, acrylic) into custom drawer organization layouts.
Required Reading Before Generating Code
CRITICAL: NeoGrid is a HYBRID system:
- 3D-print: Connectors only (~50g filament per piece)
- Buy/cut: Divider material (MDF, plywood, acrylic, uPVC) from hardware store
Official NeoGrid 2.0 implementation:
- QuackWorks GitHub: https://github.com/AndyLevesque/QuackWorks/tree/main/NeoGrid
- Local clone:
/Users/aaron/workspace/infra/neat-little-package/.tmp/QuackWorks/NeoGrid/ - Main files:
Neogrid.scad(connectors),DrawerLabelsAndHandles.scad(labels) - License: CC BY-NC-SA 4.0
System references:
- home-organization/neogrid-reference.md - System overview and material selection
- Fetch QuackWorks repo for current parameter syntax
Core Understanding (Critical Architecture)
What Makes NeoGrid Different: Hybrid Economics
NOT a fully 3D-printed system. NeoGrid separates components by manufacturing efficiency:
3D-print the connectors:
- Junctions (X, T, L, I, End pieces)
- ~50g filament per connector
- Print time: 1-3 hours depending on connector type
- Functional geometry (channels, retention, base mounting)
Buy the dividers:
- 8.5mm uPVC utility board (UK standard)
- 6.35mm (1/4") plywood (US standard)
- 3mm-9mm+ MDF, acrylic, foam board
- Cost: ~$10-20 for entire drawer system vs hundreds in filament
- Faster: Cut to length vs 50+ hours printing sheets
Why this works:
- Connectors require precision geometry (print it)
- Dividers are simple rectangles (buy it cheap)
- Material cost: 90% savings vs fully printed
- Assembly time: Cut dividers once, reuse connectors anywhere
Critical Parameter: Material Thickness
Most important parameter in entire system:
Material_Thickness = 8.5; // MEASURE YOUR ACTUAL MATERIAL!
Why it's critical:
- Even 0.2mm variation affects friction fit
- Tolerance: ±0.15mm for proper grip
- Too loose: Dividers wobble, layout collapses
- Too tight: Dividers won't insert, connectors crack
Process:
- Buy material from hardware store
- Measure with calipers (NOT ruler)
- If painted: Measure AFTER painting (adds thickness)
- Print ONE test connector
- Verify fit before batch printing
- Adjust parameter by 0.1-0.2mm if needed
Common materials and actual measurements:
| Material | Nominal | Actual (measure!) | Setting |
|---|---|---|---|
| UK utility board | 8.5mm | 8.3-8.7mm | Measure |
| US 1/4" plywood | 6.35mm | 6.0-6.5mm | Measure |
| 6mm MDF | 6mm | 5.8-6.2mm | Measure |
| 3mm acrylic | 3mm | 2.9-3.1mm | Measure |
Base System Integration
Connectors attach to drawer bottom via one of four base types:
Gridfinity (42mm grid):
- Snaps onto Gridfinity baseplate
- Allows repositioning without re-taping
- Grid alignment ensures straight layouts
- Use for drawers with existing Gridfinity setup
OpenGrid (25mm grid):
- Vertical wall mounting option
- Less common for drawer use
- Two variants: Full (6.8mm) or Lite (3.4mm)
- Optional directional snaps for vertical strength
Flat (30mm grid or custom):
- No snap features, just flat base
- Use adhesive/tape to secure
- Flexible grid sizing
- Simple, universal option
None (no base):
- For non-drawer applications
- Dividers rest on surface directly
- Minimal filament usage
Connector Type Navigation
NeoGrid has 6 connector types (plus drawer label holders). Each has dedicated subpage:
| Connector | Use case | Read |
|---|---|---|
| X Intersection | 4-way junctions (interior grid points) | ./connector-types/x-intersection.md |
| T Intersection | 3-way junctions (edges, perpendicular joins) | ./connector-types/t-intersection.md |
| L Intersection | Corner junctions (90° turns) | ./connector-types/l-intersection.md |
| I Junction | Straight-through connections (in-line) | ./connector-types/straight-through.md |
| Straight End | Terminators (open ends with buffer) | ./connector-types/straight-end.md |
| Vertical Trim | Edge trim for drawer openings | ./connector-types/vertical-trim.md |
Drawer labels (bonus accessory):
- Label holders that mount to drawer fronts
- Hook mount (standard) or adhesive tape
- Not part of divider system, but commonly paired
- Read: ./drawer-labels.md
Material Selection Guide
Choose divider material based on budget, availability, and drawer use:
Detailed material comparison: ./hybrid-approach.md
Quick reference:
| Material | Thickness | Cost | Pros | Cons |
|---|---|---|---|---|
| uPVC utility board | 8.5mm | Low | Minimal paint, long lengths | UK-specific |
| Plywood | 6mm, 8mm | Low | Strong, natural look | Needs finish |
| MDF | 3mm, 6mm, 8mm | Very low | Cheap, smooth | Heavy, needs retention spikes |
| Acrylic | 3mm, 6mm | Medium | Transparent, clean | Brittle, expensive |
| Foam board | 5mm | Very low | Lightweight | Low strength |
Critical reminder: Measure actual material thickness before printing. Nominal ≠ actual.
Base Selection Guide
Choose base system based on drawer setup:
Detailed base options: ./base-options.md
Quick decision framework:
Do you have Gridfinity baseplate in drawer?
├─ Yes → Use Gridfinity base (42mm)
└─ No
├─ Want to add Gridfinity later? → Use Gridfinity base (future-proof)
└─ No Gridfinity needed
├─ Want easy repositioning? → Use Flat base + adhesive (30mm)
└─ Permanent install → Use None (minimal filament)
Multi-tile support (Gridfinity only):
grid_x = 2; // 2 tiles wide (84mm)
grid_y = 3; // 3 tiles deep (126mm)
Only X Intersection connectors support multi-tile bases currently.
Connector Selection Framework (Decision Layer)
When User Describes Drawer Layout
Use this decision tree to select connector types:
Ask these questions:
How many dividers meet at junction?
- Four (cross pattern) → X Intersection
- Three (T pattern) → T Intersection
- Two (corner) → L Intersection
- Two (straight line) → I Junction
- One (end of divider) → Straight End
Where is junction located?
- Interior grid point → X Intersection (most versatile)
- Edge with perpendicular divider → T Intersection
- Corner → L Intersection
- Drawer opening edge → Vertical Trim
What's the layout pattern?
- Regular grid → Mostly X Intersections + edges (T, L, End)
- Asymmetric compartments → Mix of all types as needed
Example layout analysis:
User: "3×3 grid in my drawer"
Analysis:
- Interior: 4 X Intersections (where grid lines cross)
- Edges: 8 T Intersections (where dividers meet drawer edge)
- Corners: 4 L Intersections (drawer corners)
- Total: 4 X + 8 T + 4 L = 16 connectors + 16 top pieces
Start with X Intersections: Most versatile, works for testing material fit.
Code Generation Best Practices
Parameter Organization
Always declare these parameters at top of file:
// CRITICAL: Material measurement
Material_Thickness = 8.5; // MEASURE actual material with calipers!
Channel_Depth = 20; // How deep material sits in connector
Wall_Thickness = 4; // Connector wall thickness
// Base system selection
Selected_Base = "Gridfinity"; // Gridfinity | openGrid | Flat | None
grid_size = 42; // Auto-set based on Selected_Base
grid_x = 1; // Tiles horizontally (Gridfinity only)
grid_y = 1; // Tiles vertically (Gridfinity only)
// Gridfinity-specific
Added_Base_Thickness = 1; // Extra base height beyond profile
// OpenGrid-specific
openGrid_Full_or_Lite = "Lite"; // Full | Lite
openGrid_Directional_Snap = false; // Vertical mounting
openGrid_Directional_Snap_Orientation = 1; // 1-4 rotation
// Flat base
Flat_Base_Thickness = 1.4; // Base thickness in mm
// Material retention
Retention_Spike = false; // Add spikes for MDF (soft materials)
Spike_Scale = 1; // Scale spike size
// Part selection
Select_Part = "X Intersection"; // See connector type options
Top_or_Bottom = "Both"; // Top | Bottom | Both
// Top chamfers
Top_Chamfers = true; // Ease material insertion
Why this order: Critical material parameter first, base system second, optional features last.
Two-Piece System (Base + Top)
All connectors use two-piece design (except Vertical Trim):
// Bottom piece (has base attachment - Gridfinity/openGrid/Flat)
NeoGrid_X_Intersection_Base(
Material_Thickness,
Channel_Depth = Channel_Depth,
Wall_Thickness = Wall_Thickness,
grid_size = grid_size
);
// Top piece (caps the junction, no base)
NeoGrid_X_Intersection_Top(
Material_Thickness,
Channel_Depth = Channel_Depth,
Wall_Thickness = Wall_Thickness,
grid_size = grid_size
);
Why two pieces:
- Base provides stability and positioning
- Top locks dividers in place vertically
- Allows swapping divider materials without reprinting bases
- Separate prints = less support material
Assembly: Insert dividers into base channels → Place top piece over junction.
Material Thickness Workflow
When user says "I need connectors for X dividers":
Ask about material type and measurement:
- "What material? (MDF, plywood, acrylic, uPVC)"
- "Have you measured thickness with calipers?"
- "If painted, measure after painting"
Set Material_Thickness parameter:
Material_Thickness = 8.5; // User's measured valueRecommend test print:
- "Print ONE X Intersection (base + top) to verify fit"
- "Divider should friction-fit securely without forcing"
- "Adjust parameter by ±0.1-0.2mm if needed"
Batch printing guidance:
- "After fit verified, print remaining connectors"
- "All connectors use same Material_Thickness"
- "Orientation: Parts print upright as displayed in QuackWorks"
Connector Module Integration
Read the QuackWorks source, don't reinvent:
// DON'T write connector geometry from scratch
// DO fetch current modules from QuackWorks repo
// Option 1: Direct include (if user has BOSL2)
include <BOSL2/std.scad>
include <BOSL2/rounding.scad>
include <path/to/Neogrid.scad>
NeoGrid_X_Intersection_Base(...);
// Option 2: Paste relevant module from QuackWorks
// (if user wants standalone file)
module NeoGrid_X_Intersection_Base(...) {
// [copied from Neogrid.scad]
}
When to use each connector type: See connector-types/*.md for detailed geometry and use cases.
Common Pitfalls
Pitfall #1: Hardcoding Material Thickness Instead of Measuring
Problem: User says "I have 1/4 inch plywood", code uses Material_Thickness = 6.35, connectors don't fit.
Why it fails: Nominal thickness ≠ actual thickness. 1/4" plywood can be 6.0-6.5mm depending on manufacturer.
Better approach:
// DON'T assume nominal:
Material_Thickness = 6.35; // "It's 1/4 inch"
// DO ask user to measure:
echo("CRITICAL: Measure actual material with calipers!");
echo("Even 0.2mm variation affects fit.");
Material_Thickness = 6.4; // User's measured value
Pitfall #2: Skipping Test Print
Problem: User prints 20 connectors, discovers material doesn't fit, wastes filament.
Why it fails: Material variation, printer tolerance, measurement errors compound.
Better approach:
// Workflow guidance:
// 1. Print ONE X Intersection (base + top)
// 2. Test material fit
// 3. Adjust Material_Thickness ±0.1-0.2mm if needed
// 4. THEN batch print remaining connectors
Include in code comments: Remind user to test before batch printing.
Pitfall #3: Wrong Base System for User's Drawer
Problem: User has no Gridfinity baseplate, code generates Gridfinity base, connectors don't sit flat.
Why it fails: Didn't ask about existing drawer setup.
Better approach:
// Ask before generating:
// "Do you have Gridfinity baseplate in this drawer?"
// ├─ Yes → Selected_Base = "Gridfinity"
// └─ No → Selected_Base = "Flat" // Use adhesive to secure
Pitfall #4: Forgetting Retention Spikes for Soft Materials
Problem: User has MDF dividers, connectors don't grip firmly, layout sags.
Why it fails: MDF is soft, benefits from retention spikes for friction.
Better approach:
// Check material type:
// "What divider material?"
// ├─ MDF → Retention_Spike = true;
// ├─ Plywood → Retention_Spike = false; (optional)
// └─ Acrylic → Retention_Spike = false; (never)
Pitfall #5: Multi-Tile Grid Without Gridfinity Base
Problem: User wants 2×3 connector grid, code sets grid_x=2, grid_y=3 with Selected_Base="Flat", parameters ignored.
Why it fails: Multi-tile support is Gridfinity-only (currently).
Better approach:
// Warn user:
if (grid_x > 1 || grid_y > 1) {
echo("WARNING: Multi-tile (grid_x/grid_y) only supported with Gridfinity base");
echo("For Flat/None base, use grid_x=1, grid_y=1");
}
Quality Checklist
Before delivering OpenSCAD code:
Required elements:
- ✓ Material_Thickness parameter clearly documented with measurement reminder
- ✓ Base system selected based on user's drawer setup
- ✓ Appropriate connector type(s) for layout described
- ✓ Top_or_Bottom set correctly (usually "Both")
- ✓ Retention_Spike evaluated based on material type
- ✓ Test print workflow mentioned in comments
Parameter validation:
- ✓ Material_Thickness: User measured actual material (not assumed nominal)
- ✓ Channel_Depth: Default 20mm (adequate for most drawers)
- ✓ Wall_Thickness: Default 4mm (adequate strength)
- ✓ grid_size: Auto-set based on Selected_Base (don't override unless custom)
Base system compliance:
- ✓ Selected_Base matches user's drawer setup
- ✓ If Gridfinity: grid_x/grid_y set for multi-tile (if needed)
- ✓ If openGrid: Full/Lite and directional snap configured
- ✓ If Flat: Flat_Base_Thickness set
- ✓ If None: User understands no base attachment
Code quality:
- ✓ Parameterized (uses Material_Thickness variable, not hardcoded values)
- ✓ Clear variable names
- ✓ Comments explain hybrid system approach
- ✓ Module calls use QuackWorks functions (don't reinvent)
- ✓ BOSL2 library referenced (required dependency)
User communication:
- ✓ Explained hybrid approach (print connectors, buy dividers)
- ✓ Material measurement workflow emphasized
- ✓ Test print recommended before batch
- ✓ Assembly instructions (base → dividers → top)
- ✓ Connector count calculated if layout specified
Assembly Workflow
Standard NeoGrid assembly process:
- Design layout: Measure drawer, plan divider pattern
- Measure material: Use calipers on actual divider material
- Test print: ONE connector type (X Intersection recommended)
- Verify fit: Material should friction-fit with slight resistance
- Adjust if needed: ±0.1-0.2mm on Material_Thickness parameter
- Cut dividers: Standard length 160mm (or
42mm × N - Material_Thickness) - Batch print: All connectors for layout
- Assemble: Place bases → insert dividers → add tops
- Install: Place in drawer (on baseplate or with adhesive)
Documentation References
NeoGrid Ecosystem:
- NeoGrid 2.0: Hybrid drawer organization system
- Created by Hands on Katie (Katie)
- Licensed CC BY-NC-SA 4.0
- This skill focuses on CODE GENERATION for connectors
Related skills:
- home-organization/neogrid-reference.md - System overview, material selection, use cases
- For system selection guidance, defer to that skill
- This skill is only for "generate OpenSCAD code for NeoGrid connectors"
Official resources: