Devadex

File Flow

gumroad   $10.00   by pinonster

<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>FileFlow — Smart File Organizer Widget</title><link href="https://fonts.googleapis.com/css2?family=Instrument+Serif:ital@0;1&amp;family=Satoshi:wght@400;500;600;700;900&amp;display=swap" rel="stylesheet"><style> :root { --bg: #0C0B0A; --surface: #161514; --surface2: #1E1D1B; --border: #2A2826; --border-light: #353330; --text: #F5F0EB; --text-secondary: #9C9590; --text-dim: #6B6560; --accent: #E8FF5A; --accent-dim: rgba(232, 255, 90, 0.08); --accent-glow: rgba(232, 255, 90, 0.15); --warm: #FF8F5A; --warm-dim: rgba(255, 143, 90, 0.1); } * { margin: 0; padding: 0; box-sizing: border-box; } body { background: var(--bg); color: var(--text); font-family: 'Satoshi', sans-serif; line-height: 1.6; overflow-x: hidden; -webkit-font-smoothing: antialiased; } /* ─── Grain Overlay ─── */ body::before { content: ''; position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noise'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noise)' opacity='0.03'/%3E%3C/svg%3E"); pointer-events: none; z-index: 9999; } /* ─── Ambient Glow ─── */ .ambient { position: fixed; width: 600px; height: 600px; border-radius: 50%; filter: blur(180px); opacity: 0.3; pointer-events: none; z-index: 0; } .ambient-1 { background: var(--accent); top: -200px; right: -100px; opacity: 0.06; } .ambient-2 { background: var(--warm); bottom: -200px; left: -100px; opacity: 0.04; } /* ─── Nav ─── */ nav { position: fixed; top: 0; left: 0; right: 0; padding: 16px 40px; display: flex; align-items: center; justify-content: space-between; z-index: 100; background: rgba(12, 11, 10, 0.8); backdrop-filter: blur(20px); border-bottom: 1px solid var(--border); } .logo { font-family: 'Instrument Serif', serif; font-size: 22px; font-style: italic; letter-spacing: -0.02em; color: var(--text); display: flex; align-items: center; gap: 8px; } .logo-icon { width: 28px; height: 28px; background: var(--accent); border-radius: 7px; display: flex; align-items: center; justify-content: center; font-size: 14px; font-style: normal; color: var(--bg); } .nav-links { display: flex; gap: 32px; align-items: center; } .nav-links a { color: var(--text-secondary); text-decoration: none; font-size: 14px; font-weight: 500; transition: color 0.2s; } .nav-links a:hover { color: var(--text); } /* ─── Hero ─── */ .hero { padding: 160px 40px 80px; max-width: 1200px; margin: 0 auto; position: relative; z-index: 1; } .badge { display: inline-flex; align-items: center; gap: 8px; padding: 6px 16px 6px 8px; border-radius: 999px; background: var(--accent-dim); border: 1px solid rgba(232, 255, 90, 0.12); font-size: 13px; font-weight: 600; color: var(--accent); margin-bottom: 32px; animation: fadeUp 0.8s ease both; } .badge-dot { width: 8px; height: 8px; background: var(--accent); border-radius: 50%; animation: pulse 2s infinite; } .hero h1 { font-family: 'Instrument Serif', serif; font-size: clamp(52px, 7vw, 88px); line-height: 1.02; letter-spacing: -0.03em; font-weight: 400; max-width: 800px; animation: fadeUp 0.8s ease 0.1s both; } .hero h1 em { font-style: italic; color: var(--accent); } .hero-sub { font-size: 18px; color: var(--text-secondary); max-width: 520px; margin-top: 24px; line-height: 1.7; animation: fadeUp 0.8s ease 0.2s both; } .hero-actions { display: flex; align-items: center; gap: 16px; margin-top: 40px; animation: fadeUp 0.8s ease 0.3s both; } /* ─── Buttons ─── */ .btn-primary { display: inline-flex; align-items: center; gap: 10px; padding: 16px 32px; background: var(--accent); color: var(--bg); border: none; border-radius: 12px; font-size: 16px; font-weight: 700; font-family: 'Satoshi', sans-serif; cursor: pointer; transition: all 0.25s ease; text-decoration: none; position: relative; overflow: hidden; } .btn-primary::after { content: ''; position: absolute; inset: 0; background: linear-gradient(135deg, rgba(255,255,255,0.2) 0%, transparent 50%); opacity: 0; transition: opacity 0.25s; } .btn-primary:hover { transform: translateY(-2px); box-shadow: 0 8px 40px var(--accent-glow); } .btn-primary:hover::after { opacity: 1; } .btn-ghost { display: inline-flex; align-items: center; gap: 8px; padding: 16px 28px; background: transparent; color: var(--text); border: 1px solid var(--border); border-radius: 12px; font-size: 15px; font-weight: 600; font-family: 'Satoshi', sans-serif; cursor: pointer; transition: all 0.25s ease; text-decoration: none; } .btn-ghost:hover { border-color: var(--text-dim); background: var(--surface); } .price-tag { font-size: 14px; color: var(--text-dim); font-weight: 500; } .price-tag strong { font-size: 28px; font-weight: 900; color: var(--text); letter-spacing: -0.02em; } /* ─── Preview ─── */ .preview-section { max-width: 1200px; margin: 0 auto; padding: 0 40px 80px; position: relative; z-index: 1; animation: fadeUp 0.8s ease 0.4s both; } .preview-frame { border-radius: 16px; border: 1px solid var(--border); background: var(--surface); overflow: hidden; position: relative; box-shadow: 0 40px 100px rgba(0,0,0,0.4), 0 0 0 1px rgba(255,255,255,0.03) inset; } .preview-bar { display: flex; align-items: center; gap: 8px; padding: 14px 20px; background: var(--surface2); border-bottom: 1px solid var(--border); } .preview-dot { width: 10px; height: 10px; border-radius: 50%; } .preview-dot.r { background: #FF5F57; } .preview-dot.y { background: #FFBD2E; } .preview-dot.g { background: #28C840; } .preview-body { display: flex; height: 420px; } .preview-sidebar { width: 220px; border-right: 1px solid var(--border); padding: 20px 12px; display: flex; flex-direction: column; gap: 4px; } .preview-sidebar-label { font-size: 10px; font-weight: 700; color: var(--text-dim); text-transform: uppercase; letter-spacing: 0.08em; padding: 0 8px; margin-bottom: 8px; } .preview-folder { display: flex; align-items: center; gap: 8px; padding: 8px 10px; border-radius: 8px; font-size: 13px; font-weight: 500; color: var(--text-secondary); cursor: default; transition: background 0.15s; } .preview-folder.active { background: rgba(232, 255, 90, 0.06); color: var(--accent); } .preview-folder span:first-child { font-size: 15px; } .preview-main { flex: 1; padding: 20px; display: flex; flex-direction: column; gap: 8px; overflow: hidden; } .preview-file { display: flex; align-items: center; gap: 12px; padding: 12px 14px; border-radius: 10px; background: var(--surface2); border: 1px solid var(--border); font-size: 13px; font-weight: 500; animation: slideIn 0.5s ease both; } .preview-file:nth-child(2) { animation-delay: 0.1s; } .preview-file:nth-child(3) { animation-delay: 0.2s; } .preview-file:nth-child(4) { animation-delay: 0.3s; } .preview-file:nth-child(5) { animation-delay: 0.4s; } .preview-file-icon { font-size: 20px; width: 28px; text-align: center; } .preview-file-name { flex: 1; } .preview-tag { display: inline-flex; padding: 2px 10px; border-radius: 999px; font-size: 11px; font-weight: 600; } .preview-tag.blue { background: rgba(96,165,250,0.15); color: #60A5FA; } .preview-tag.green { background: rgba(74,222,128,0.15); color: #4ADE80; } .preview-tag.amber { background: rgba(251,191,36,0.15); color: #FBBF24; } .preview-tag.purple { background: rgba(192,132,252,0.15); color: #C084FC; } .preview-date { font-size: 12px; color: var(--text-dim); } /* ─── Features ─── */ .features { max-width: 1200px; margin: 0 auto; padding: 80px 40px; position: relative; z-index: 1; } .features-label { font-size: 13px; font-weight: 700; color: var(--accent); text-transform: uppercase; letter-spacing: 0.1em; margin-bottom: 16px; } .features h2 { font-family: 'Instrument Serif', serif; font-size: clamp(36px, 4vw, 52px); letter-spacing: -0.03em; font-weight: 400; margin-bottom: 56px; } .features-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); gap: 16px; } .feature-card { padding: 32px; border-radius: 16px; background: var(--surface); border: 1px solid var(--border); transition: all 0.3s ease; position: relative; overflow: hidden; } .feature-card::before { content: ''; position: absolute; top: 0; left: 0; right: 0; height: 1px; background: linear-gradient(90deg, transparent, rgba(232,255,90,0.2), transparent); opacity: 0; transition: opacity 0.3s; } .feature-card:hover { border-color: var(--border-light); transform: translateY(-4px); } .feature-card:hover::before { opacity: 1; } .feature-icon { width: 48px; height: 48px; display: flex; align-items: center; justify-content: center; border-radius: 12px; font-size: 22px; margin-bottom: 20px; background: var(--surface2); border: 1px solid var(--border); } .feature-card h3 { font-size: 17px; font-weight: 700; margin-bottom: 8px; letter-spacing: -0.01em; } .feature-card p { font-size: 14px; color: var(--text-secondary); line-height: 1.7; } /* ─── Tech Stack ─── */ .stack { max-width: 1200px; margin: 0 auto; padding: 60px 40px 80px; position: relative; z-index: 1; } .stack-bar { display: flex; flex-wrap: wrap; gap: 12px; padding: 32px; border-radius: 16px; background: var(--surface); border: 1px solid var(--border); justify-content: center; } .stack-item { display: inline-flex; align-items: center; gap: 8px; padding: 10px 20px; border-radius: 999px; background: var(--surface2); border: 1px solid var(--border); font-size: 13px; font-weight: 600; color: var(--text-secondary); } /* ─── CTA ─── */ .cta { max-width: 1200px; margin: 0 auto; padding: 0 40px 120px; position: relative; z-index: 1; } .cta-box { padding: 64px; border-radius: 24px; background: var(--surface); border: 1px solid var(--border); text-align: center; position: relative; overflow: hidden; } .cta-box::before { content: ''; position: absolute; top: -200px; left: 50%; transform: translateX(-50%); width: 500px; height: 400px; background: radial-gradient(ellipse, var(--accent-glow), transparent 70%); pointer-events: none; } .cta-box h2 { font-family: 'Instrument Serif', serif; font-size: clamp(32px, 4vw, 48px); letter-spacing: -0.03em; font-weight: 400; margin-bottom: 12px; position: relative; } .cta-box p { font-size: 16px; color: var(--text-secondary); margin-bottom: 32px; position: relative; } .cta-box .btn-primary { position: relative; } .cta-price { margin-top: 16px; font-size: 13px; color: var(--text-dim); position: relative; } /* ─── Footer ─── */ footer { padding: 32px 40px; border-top: 1px solid var(--border); display: flex; justify-content: space-between; align-items: center; max-width: 1200px; margin: 0 auto; position: relative; z-index: 1; } footer span { font-size: 13px; color: var(--text-dim); } /* ─── Animations ─── */ @keyframes fadeUp { from { opacity: 0; transform: translateY(24px); } to { opacity: 1; transform: translateY(0); } } @keyframes slideIn { from { opacity: 0; transform: translateX(-12px); } to { opacity: 1; transform: translateX(0); } } @keyframes pulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.4; } } /* ─── Responsive ─── */ @media (max-width: 768px) { nav { padding: 14px 20px; } .nav-links { display: none; } .hero { padding: 120px 20px 60px; } .hero-actions { flex-direction: column; align-items: flex-start; } .preview-section, .features, .stack, .cta { padding-left: 20px; padding-right: 20px; } .preview-sidebar { display: none; } .cta-box { padding: 40px 24px; } footer { flex-direction: column; gap: 12px; text-align: center; } }</style></head><body><div class="ambient ambient-1"></div><div class="ambient ambient-2"></div><!-- Nav --><nav> <div class="logo"> <div class="logo-icon">⚡</div> FileFlow </div> <div class="nav-links"> <a href="#features">Features</a> <a href="#preview">Preview</a> <a href="#buy" class="btn-primary" style="padding:10px 24px; font-size:14px; border-radius:10px;">Get it — $10</a> </div></nav><!-- Hero --><section class="hero"> <div class="badge"> <span class="badge-dot"></span> React Component · Ready to Ship </div> <h1>Organize files<br>with <em>clarity</em></h1> <p class="hero-sub"> A polished React file organizer widget with folders, tags, drag &amp; drop, search — and persistent storage. Drop it into any project. </p> <div class="hero-actions"> <a href="https://gumroad.com" class="btn-primary" id="buy"> Buy now — $10 <svg width="16" height="16" viewBox="0 0 16 16" fill="none"><path d="M3 8h10M9 4l4 4-4 4" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg> </a> <a href="#preview" class="btn-ghost">See it in action ↓</a> <div class="price-tag"> <strong>$10</strong><br>one-time purchase </div> </div></section><!-- Preview --><section class="preview-section" id="preview"> <div class="preview-frame"> <div class="preview-bar"> <div class="preview-dot r"></div> <div class="preview-dot y"></div> <div class="preview-dot g"></div> </div> <div class="preview-body"> <div class="preview-sidebar"> <div class="preview-sidebar-label">Folders</div> <div class="preview-folder active"><span>🗂</span> All Files</div> <div class="preview-folder"><span>📁</span> Work</div> <div class="preview-folder"><span>📁</span> Personal</div> <div class="preview-folder"><span>📁</span> Projects</div> <div class="preview-sidebar-label" style="margin-top:24px">Tags</div> <div style="display:flex; flex-wrap:wrap; gap:4px; padding:0 8px;"> <span class="preview-tag blue">important</span> <span class="preview-tag green">finance</span> <span class="preview-tag amber">work</span> <span class="preview-tag purple">archive</span> </div> </div> <div class="preview-main"> <div class="preview-file"> <span class="preview-file-icon">📄</span> <span class="preview-file-name">Q4 Report.pdf</span> <span class="preview-tag blue">important</span> <span class="preview-date">Mar 1</span> </div> <div class="preview-file"> <span class="preview-file-icon">📊</span> <span class="preview-file-name">Budget.xlsx</span> <span class="preview-tag green">finance</span> <span class="preview-date">Feb 25</span> </div> <div class="preview-file"> <span class="preview-file-icon">📝</span> <span class="preview-file-name">Meeting Notes.docx</span> <span class="preview-tag amber">work</span> <span class="preview-date">Mar 3</span> </div> <div class="preview-file"> <span class="preview-file-icon">📑</span> <span class="preview-file-name">Presentation.pptx</span> <span class="preview-tag amber">work</span> <span class="preview-date">Mar 2</span> </div> <div class="preview-file"> <span class="preview-file-icon">🖼</span> <span class="preview-file-name">Vacation.jpg</span> <span class="preview-tag purple">photos</span> <span class="preview-date">Feb 18</span> </div> </div> </div> </div></section><!-- Features --><section class="features" id="features"> <div class="features-label">Features</div> <h2>Everything you need,<br>nothing you don't.</h2> <div class="features-grid"> <div class="feature-card"> <div class="feature-icon">📂</div> <h3>Nested Folders</h3> <p>Create unlimited folder hierarchies. Expand, collapse, navigate — just like a real file system.</p> </div> <div class="feature-card"> <div class="feature-icon">🏷</div> <h3>Smart Tags</h3> <p>Color-coded tags with one-click filtering. Tag any file, filter by any tag, combine with search.</p> </div> <div class="feature-card"> <div class="feature-icon">🔀</div> <h3>Drag &amp; Drop</h3> <p>Move files between folders by dragging. Reorganize your entire structure in seconds, not minutes.</p> </div> <div class="feature-card"> <div class="feature-icon">🔍</div> <h3>Instant Search</h3> <p>Find anything fast. Search by filename or tag with keyboard shortcut support (⌘K).</p> </div> <div class="feature-card"> <div class="feature-icon">💾</div> <h3>Persistent Storage</h3> <p>Data saves automatically and persists across sessions. No database config needed — works out of the box.</p> </div> <div class="feature-card"> <div class="feature-icon">✨</div> <h3>Minimal &amp; Clean</h3> <p>Refined design with careful attention to spacing, typography, and micro-interactions. No bloat.</p> </div> </div></section><!-- Stack --><section class="stack"> <div class="stack-bar"> <div class="stack-item">⚛️ React</div> <div class="stack-item">🎨 CSS-in-JS</div> <div class="stack-item">📦 Single File</div> <div class="stack-item">0 Dependencies</div> <div class="stack-item">💾 Storage API</div> <div class="stack-item">♿ Accessible</div> </div></section><!-- CTA --><section class="cta" id="buy-section"> <div class="cta-box"> <h2>Ship faster with <em style="font-family:'Instrument Serif',serif; font-style:italic; color:var(--accent);">FileFlow</em></h2> <p>One file. Drop it in. Customize to your heart's content.</p> <a href="https://gumroad.com" class="btn-primary"> Buy FileFlow — $10 <svg width="16" height="16" viewBox="0 0 16 16" fill="none"><path d="M3 8h10M9 4l4 4-4 4" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg> </a> <p class="cta-price">One-time purchase · Lifetime updates · Full source code</p> </div></section><!-- Footer --><footer> <span>© 2026 FileFlow. Built with care.</span> <span>React Component · $10 · Gumroad</span></footer></body></html>

Get it → pinonster.gumroad.com

Found on Devadex — the discovery index for independent software the big search engines bury. More from gumroad.

Report this listing