genom 1.1.1

Fast reverse geocoding with additional location data
Documentation
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>genom — reverse geocoding</title>
    <link rel="icon" href="favicon.ico">
    <link rel="stylesheet" href="style.css">
</head>
<body>
    <header>
        <div class="container">
            <div class="logo-wrapper">
                <img src="logo.webp" alt="genom" class="logo">
                <span class="logo-text">genom</span>
                <span class="version">VERSION</span>
            </div>
            <nav>
                <a href="#features">features</a>
                <a href="#install">install</a>
                <a href="https://genom.tn3w.dev/docs">docs</a>
                <a href="https://github.com/tn3w/genom">github</a>
            </nav>
        </div>
    </header>

    <main>
        <section class="hero">
            <div class="container">
                <div class="hero-content">
                    <div class="hero-badge">rust geocoding library</div>
                    <h1>
                        <span class="word" style="animation-delay: 0s">turn</span>
                        <span class="word" style="animation-delay: 0.1s">coordinates</span>
                        <span class="word" style="animation-delay: 0.2s">into</span>
                        <span class="word accent" style="animation-delay: 0.3s">context</span>
                    </h1>
                    <p class="hero-description">Fast reverse geocoding with enriched location data. Sub-millisecond lookups for timezone, currency, region, and 15+ other fields.</p>
                    
                    <div class="hero-demo">
                        <div class="demo-input">
                            <span class="demo-label">input</span>
                            <input 
                                type="text" 
                                class="demo-coords-input" 
                                id="coords-input"
                                placeholder="40.7128, -74.0060"
                                value="40.7128, -74.0060"
                            />
                        </div>
                        <div class="demo-arrow"></div>
                        <div class="demo-output">
                            <span class="demo-label">output</span>
                            <div class="demo-data" id="demo-output">
                                <div>New York, United States</div>
                                <div>America/New_York • USD • NY</div>
                            </div>
                        </div>
                    </div>

                    <div class="hero-actions">
                        <a href="#install" class="btn-primary">get started</a>
                        <div class="hero-stats">
                            <div class="stat-item">
                                <span class="stat-value">&lt;1ms</span>
                                <span class="stat-label">lookup</span>
                            </div>
                            <div class="stat-divider"></div>
                            <div class="stat-item">
                                <span class="stat-value">16+</span>
                                <span class="stat-label">fields</span>
                            </div>
                            <div class="stat-divider"></div>
                            <div class="stat-item">
                                <span class="stat-value">0</span>
                                <span class="stat-label">config</span>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </section>

        <section id="features" class="features">
            <div class="container">
                <div class="section-header">
                    <h2>why genom</h2>
                    <p>built for developers who need speed and precision</p>
                </div>
                
                <div class="features-grid">
                    <div class="feature-card">
                        <div class="feature-icon"></div>
                        <h3>blazing fast</h3>
                        <p>Grid-based spatial indexing delivers consistent sub-millisecond performance. Optimized binary format with string interning keeps memory usage minimal.</p>
                    </div>
                    <div class="feature-card">
                        <div class="feature-icon">🎯</div>
                        <h3>rich data</h3>
                        <p>16+ fields per location including timezone, currency, postal code, region, continent, EU membership, and DST status. Everything you need in one call.</p>
                    </div>
                    <div class="feature-card">
                        <div class="feature-icon">🔧</div>
                        <h3>zero setup</h3>
                        <p>Database builds automatically on first install. No downloads, no configuration files, no external dependencies. Just add and use.</p>
                    </div>
                    <div class="feature-card">
                        <div class="feature-icon">🧵</div>
                        <h3>thread-safe</h3>
                        <p>Global singleton with lazy initialization. Lock-free reads mean zero contention in multi-threaded applications. Safe by default.</p>
                    </div>
                </div>
            </div>
        </section>

        <section id="install" class="install">
            <div class="container">
                <div class="install-content">
                    <div class="install-left">
                        <h2>installation</h2>
                        <p>Add genom to your Cargo.toml and start converting coordinates to location data immediately.</p>
                        <div class="install-steps">
                            <div class="step">
                                <div class="step-num">1</div>
                                <div class="step-text">Add dependency</div>
                            </div>
                            <div class="step">
                                <div class="step-num">2</div>
                                <div class="step-text">Import library</div>
                            </div>
                            <div class="step">
                                <div class="step-num">3</div>
                                <div class="step-text">Start looking up</div>
                            </div>
                        </div>
                    </div>
                    <div class="install-right">
                        <div class="code-window">
                            <div class="code-header">
                                <div class="code-dots">
                                    <span></span>
                                    <span></span>
                                    <span></span>
                                </div>
                                <div class="code-title">Cargo.toml</div>
                            </div>
                            <pre><code><span class="c-bracket">[</span><span class="c-key">dependencies</span><span class="c-bracket">]</span>
<span class="c-key">genom</span> <span class="c-op">=</span> <span class="c-string">"VERSION_CUT"</span></code></pre>
                        </div>
                        <div class="code-window">
                            <div class="code-header">
                                <div class="code-dots">
                                    <span></span>
                                    <span></span>
                                    <span></span>
                                </div>
                                <div class="code-title">main.rs</div>
                            </div>
                            <pre><code><span class="c-keyword">use</span> genom;

<span class="c-keyword">let</span> place <span class="c-op">=</span> genom<span class="c-op">::</span><span class="c-fn">lookup</span>(<span class="c-num">40.7128</span>, <span class="c-num">-74.0060</span>)<span class="c-op">?</span>;
<span class="c-fn">println!</span>(<span class="c-string">"{}"</span>, place.timezone);</code></pre>
                        </div>
                    </div>
                </div>
            </div>
        </section>

        <section class="data-section">
            <div class="container">
                <div class="section-header">
                    <h2>complete location data</h2>
                    <p>every field you need, returned in microseconds</p>
                </div>
                
                <div class="data-showcase">
                    <div class="data-category">
                        <h4>location</h4>
                        <div class="data-tags">
                            <span>city</span>
                            <span>region</span>
                            <span>region_code</span>
                            <span>district</span>
                            <span>postal_code</span>
                        </div>
                    </div>
                    <div class="data-category">
                        <h4>geography</h4>
                        <div class="data-tags">
                            <span>country_code</span>
                            <span>country_name</span>
                            <span>continent_code</span>
                            <span>continent_name</span>
                            <span>is_eu</span>
                        </div>
                    </div>
                    <div class="data-category">
                        <h4>time & currency</h4>
                        <div class="data-tags">
                            <span>timezone</span>
                            <span>timezone_abbr</span>
                            <span>utc_offset</span>
                            <span>dst_active</span>
                            <span>currency</span>
                        </div>
                    </div>
                    <div class="data-category">
                        <h4>coordinates</h4>
                        <div class="data-tags">
                            <span>latitude</span>
                            <span>longitude</span>
                        </div>
                    </div>
                </div>
            </div>
        </section>
    </main>

    <footer>
        <div class="container">
            <div class="footer-grid">
                <div class="footer-brand">
                    <img src="logo.webp" alt="genom" class="footer-logo">
                    <p>Fast reverse geocoding for Rust</p>
                    <p class="footer-license">Apache-2.0 License</p>
                </div>
                <div class="footer-col">
                    <h4>resources</h4>
                    <a href="https://genom.tn3w.dev/docs">documentation</a>
                    <a href="https://crates.io/crates/genom">crates.io</a>
                    <a href="https://github.com/tn3w/genom">github</a>
                </div>
                <div class="footer-col">
                    <h4>data</h4>
                    <a href="https://www.geonames.org/">geonames</a>
                    <a href="https://github.com/tn3w/genom/issues">report issue</a>
                </div>
            </div>
        </div>
    </footer>

    <script>
        const examples = {
            '40.7128, -74.0060': {
                city: 'New York',
                country: 'United States',
                timezone: 'America/New_York',
                currency: 'USD',
                region: 'NY'
            },
            '51.5074, -0.1278': {
                city: 'London',
                country: 'United Kingdom',
                timezone: 'Europe/London',
                currency: 'GBP',
                region: 'ENG'
            },
            '35.6762, 139.6503': {
                city: 'Tokyo',
                country: 'Japan',
                timezone: 'Asia/Tokyo',
                currency: 'JPY',
                region: '13'
            }
        };

        const inputEl = document.getElementById('coords-input');
        const outputEl = document.getElementById('demo-output');

        function updateOutput() {
            const value = inputEl.value.trim();
            const example = examples[value];
            
            if (example) {
                outputEl.innerHTML = `
                    <div>${example.city}, ${example.country}</div>
                    <div>${example.timezone}  ${example.currency}  ${example.region}</div>
                `;
            } else {
                outputEl.innerHTML = `
                    <div>Try example coordinates</div>
                    <div>40.7128, -74.0060</div>
                `;
            }
        }

        inputEl.addEventListener('input', updateOutput);
    </script>
</body>
</html>