Materializr
Open-source parametric 3D CAD for makers — constraint sketches, solid modeling, threads, SVG & text engraving, STL/STEP export. Android, iPad, Linux, Mac, Windows. Vibe coded.
翻译准备中
尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证A single-screen workbench for custom web cursors. 27 live cursors, every parameter tunable, and the JS / React / CSS snippet is generated from the values you tuned. No build step, no dependencies.
翻译准备中
取自仓库 README
正在加载完整 README。 以下为已保存的摘录。
A single-screen workbench for custom web cursors. 28 cursors — 11 drawn and 17
animated — each one live, each parameter tunable, and the JS / React / CSS snippet is
generated from the values you actually tuned.
No build step, no dependencies, no framework. Open index.html and it runs.
Most cursor collections hand you a static snippet and hope it fits. This one hands you a
control panel: drag a slider, watch the cursor change under your pointer, then copy code
that already carries your values.
Design — drawn cursors, shipped as cursor: url(data:image/svg+xml,…).查看完整 README ↗A single-screen workbench for custom web cursors. 28 cursors — 11 drawn and 17 animated — each one live, each parameter tunable, and the JS / React / CSS snippet is generated from the values you actually tuned.
No build step, no dependencies, no framework. Open index.html and it runs.
Live demo → · MIT licensed
Most cursor collections hand you a static snippet and hope it fits. This one hands you a control panel: drag a slider, watch the cursor change under your pointer, then copy code that already carries your values.
┌──────────────────────────────────────────────────────────────┐
│ ▚ CURSOR LAB [ DESIGN │ ANIMATED ] 17 UNITS ⭐ ─ │
├────────────┬───────────────────────────────┬─────────────────┤
│ POINTER │ │ POINTER / 01 │
│ Dot & Ring │ LIVE STAGE │ DOT & RING │
│ ... │ │ ─────────────── │
│ TRAIL │ │ FOLLOW 0.14 │
│ ... │ │ ▮▮▮▮▮▮▯▯▯▯▯▯▯▯ │
│ FIELD │ │ [RESET][SOURCE] │
└────────────┴───────────────────────────────┴─────────────────┘
└── SOURCE slides up over the stage ──┘
Design — drawn cursors, shipped as cursor: url(data:image/svg+xml,…).
| Group | Cursors |
|---|---|
| Aero | Aero Arrow |
| Y2K | Candy Arrow · Bunny · Sparkle · Cherry · Love Arrow |
| 8-bit | Pixel Arrow · Pixel Heart · Pixel Pencil |
| Kawaii | Kitty · Peepers |
Animated — grouped by what they actually do.
| Group | Cursors |
|---|---|
| Pointer (replace the arrow) | Dot & Ring · Velocity Squish · Crosshair HUD · Custom Pointer · Figma Cursor · Eyes · Liquid Glass · Butterfly |
| Trail (leave something behind) | Cascading Dots · Swirl · Silky Ribbon · Pixel Trail · Fluid Smoke · Cursor Ghost |
| Field (the surface reacts) | Magnet Lines · ASCII Field · Dot Grid Warp |
0…1
(tail position, particle life, field strength), which is cheaper and reads better than
a real canvas gradient.(pointer: fine) and does
nothing on touch.git clone https://github.com/oleksand4rux-del/cursor-lab.git
cd cursor-lab
python -m http.server 5175
Then open http://localhost:5175. Opening index.html straight from disk works too.
Open any entry, tune it, hit SOURCE, pick a stack and copy. Three rules the generated code always follows:
cursor: none on a section, never the document.transform and opacity, one write per frame inside
a single requestAnimationFrame.(pointer: fine) and simply do nothing on touch.Every entry is one object. Push it into the right file and the catalogue, groups, counters, inspector and code panel pick it up automatically.
ANIM_DB.push({
id: 'my-cursor',
name: 'My Cursor',
group: 'Pointer', // Pointer | Trail | Field
desc: 'One sentence on what it does and why.',
hideCursor: true,
content: '<div class="stage__body">…</div>',
params: [
{ key: 'ease', label: 'Follow', type: 'range', min: .04, max: .4, step: .01, value: .14 },
{ key: 'count', label: 'Nodes', type: 'range', min: 3, max: 40, step: 1, value: 14, rebuild: true },
{ key: 'on', label: 'Blend', type: 'switch', value: true },
{ key: 'mode', label: 'Mode', type: 'select', value: 'a', options: ['a', 'b'] },
{ key: 'label', label: 'Name', type: 'text', value: 'you' },
{ key: 'color', label: 'Colour', type: 'paint', value: { a: '#FFFFFF', b: '#5B9BF6', on: false } }
],
mount(stage, p) { /* p mutates live */ return destroy; },
code(p) { return { js, react, css }; }
});
rebuild: true marks a parameter that needs the effect recreated (element counts, for
example). Everything else applies without a remount.
See CONTRIBUTING.md for the full walkthrough.
index.html the single screen
assets/style.css design tokens, three panes, source drawer
assets/engine.js tiny runtime: FX.mount / layer / canvas / paint helpers
assets/db-design.js 11 drawn cursors
assets/db-pointer.js 8 pointer effects
assets/db-trail.js 6 trail effects
assets/db-field.js 3 field effects
assets/app.js catalogue, inspector, code generation, clipboard
docs/NOTES.uk.md detailed build notes (Ukrainian)
Built in the Nothing design language: monochrome, typography carries the hierarchy, structure instead of ornament. Dark, OLED black. One accent per screen — a single red bar on the active catalogue row.
Type: Doto for display, Space Grotesk for UI, Space Mono for data and labels.
Researched from Awwwards, Codrops, React Bits, Motion and the Framer Marketplace. Every effect here is an original implementation.
Built by Oleksandr Yeromin.