diff --git a/docs/assets/cli-demo.png b/docs/assets/cli-demo.png
new file mode 100644
index 0000000..10b4c43
Binary files /dev/null and b/docs/assets/cli-demo.png differ
diff --git a/docs/assets/favicon.png b/docs/assets/favicon.png
new file mode 100644
index 0000000..17f6386
Binary files /dev/null and b/docs/assets/favicon.png differ
diff --git a/docs/assets/logo.png b/docs/assets/logo.png
new file mode 100644
index 0000000..93ea53c
Binary files /dev/null and b/docs/assets/logo.png differ
diff --git a/docs/assets/report-demo-snippet.png b/docs/assets/report-demo-snippet.png
new file mode 100644
index 0000000..583bbf8
Binary files /dev/null and b/docs/assets/report-demo-snippet.png differ
diff --git a/docs/assets/web-ui-demo.png b/docs/assets/web-ui-demo.png
new file mode 100644
index 0000000..4545741
Binary files /dev/null and b/docs/assets/web-ui-demo.png differ
diff --git a/docs/index.html b/docs/index.html
new file mode 100644
index 0000000..f43c1a7
--- /dev/null
+++ b/docs/index.html
@@ -0,0 +1,160 @@
+
+
+
+
+
+
+ DORA - Data Oriented Report Automator
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Automate Data Analysis
in Seconds
+ From raw data to beautiful, actionable HTML reports instantly. The most powerful open-source EDA tool for
+ data scientists.
+
+
+
+
+
+
+
+
+
+
+
+

+
+
+
+

+
+
+
+

+
+
+
+
+
+
+
Why DORA?
+
+
+
+
Instant Reports
+
Generate comprehensive EDA reports with a single command. No more writing boilerplate code
+ for basic analysis.
+
+
+
+
Interactive Visuals
+
Get rich, interactive charts powered by modern web technologies. Dive deep into your data
+ with zoom, pan, and hover details.
+
+
+
+
Kaggle Integration
+
Directly download and analyze datasets from Kaggle. DORA handles authentication and file
+ selection for you.
+
+
+
+
+
+
+
+
How It Works
+
+
+
1
+
Input Data
+
Provide a CSV, key in a Kaggle URL, or upload your file.
+
+
+
2
+
Process
+
DORA analyzes distributions, correlations, and missing values automatically.
+
+
+
3
+
Report
+
Receive a shareable HTML report with all insights ready to present.
+
+
+
+
+
+
+
+
Ready to Dive In?
+
Get up and running in less than a minute.
+
+
+
Option 1: CLI Tool
+
+
+ $ pip install dora-eda
+
+
+
Option 2: Web Interface (No Install)
+
Use DORA directly in your browser without installing
+ anything.
+
Launch App
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/docs/script.js b/docs/script.js
new file mode 100644
index 0000000..8d6acf1
--- /dev/null
+++ b/docs/script.js
@@ -0,0 +1,146 @@
+// Smooth scrolling for navigation links
+document.querySelectorAll('a[href^="#"]').forEach(anchor => {
+ anchor.addEventListener('click', function (e) {
+ e.preventDefault();
+
+ const href = this.getAttribute('href');
+ if (!href || href === '#') return;
+
+ const target = document.querySelector(href);
+ if (target) {
+ target.scrollIntoView({
+ behavior: 'smooth'
+ });
+ }
+ });
+});
+
+// Copy code to clipboard
+function copyCode(elementId) {
+ const codeElement = document.getElementById(elementId);
+ let codeText = codeElement.innerText;
+
+ // Remove the '$ ' prompt if present for copying
+ if (codeText.startsWith('$ ')) {
+ codeText = codeText.substring(2);
+ }
+
+ navigator.clipboard.writeText(codeText).then(() => {
+ // Visual feedback
+ const btn = codeElement.parentElement.querySelector('.copy-btn');
+ const originalText = btn.innerText;
+ btn.innerText = 'Copied!';
+ btn.style.background = '#2b9388';
+
+ setTimeout(() => {
+ btn.innerText = originalText;
+ btn.style.background = '';
+ }, 2000);
+ }).catch(err => {
+ console.error('Failed to copy: ', err);
+ });
+}
+
+// Simple fade-in animation on scroll
+const observerOptions = {
+ threshold: 0.1
+};
+
+const observer = new IntersectionObserver((entries) => {
+ entries.forEach(entry => {
+ if (entry.isIntersecting) {
+ entry.target.classList.add('visible');
+ observer.unobserve(entry.target);
+ }
+ });
+}, observerOptions);
+
+document.querySelectorAll('.feature-card, .step').forEach(el => {
+ el.style.opacity = '0';
+ el.style.transform = 'translateY(20px)';
+ el.style.transition = 'opacity 0.6s ease, transform 0.6s ease';
+ observer.observe(el);
+});
+
+// Add visible class styling
+const style = document.createElement('style');
+style.textContent = `
+ .visible {
+ opacity: 1 !important;
+ transform: translateY(0) !important;
+ }
+`;
+document.head.appendChild(style);
+
+// Gallery switching
+const tabs = ['cli', 'web', 'report'];
+let currentTabIndex = 0;
+let autoRotateInterval;
+
+function switchGallery(tabId, event) {
+ // Update active state
+ // Buttons
+ document.querySelectorAll('.gallery-tab').forEach(tab => {
+ tab.classList.remove('active');
+ // Check data attribute
+ if (tab.dataset.tab === tabId) {
+ tab.classList.add('active');
+ }
+ });
+
+ // Content
+ document.querySelectorAll('.gallery-content').forEach(content => {
+ content.classList.remove('active');
+ });
+ document.getElementById('gallery-' + tabId).classList.add('active');
+
+ // Update current index for auto-rotation
+ currentTabIndex = tabs.indexOf(tabId);
+
+ // Reset timer on manual interaction (if event exists and is trusted)
+ if (event && event.isTrusted) {
+ resetAutoRotate();
+ }
+}
+
+function autoRotate() {
+ currentTabIndex = (currentTabIndex + 1) % tabs.length;
+ switchGallery(tabs[currentTabIndex]); // No event passed for auto-rotation
+}
+
+function resetAutoRotate() {
+ clearInterval(autoRotateInterval);
+ autoRotateInterval = setInterval(autoRotate, 5000);
+}
+
+// Start auto-rotation
+autoRotateInterval = setInterval(autoRotate, 5000);
+
+// Mobile Nav Toggle
+const navToggle = document.getElementById('navToggle');
+const navLinks = document.getElementById('navLinks');
+
+if (navToggle) {
+ navToggle.addEventListener('click', () => {
+ navLinks.classList.toggle('active');
+
+ // Change icon
+ const icon = navToggle.querySelector('i');
+ if (navLinks.classList.contains('active')) {
+ icon.classList.remove('fa-bars');
+ icon.classList.add('fa-times');
+ } else {
+ icon.classList.remove('fa-times');
+ icon.classList.add('fa-bars');
+ }
+ });
+
+ // Close menu when clicking a link
+ navLinks.querySelectorAll('a').forEach(link => {
+ link.addEventListener('click', () => {
+ navLinks.classList.remove('active');
+ navToggle.querySelector('i').classList.add('fa-bars');
+ navToggle.querySelector('i').classList.remove('fa-times');
+ });
+ });
+}
diff --git a/docs/style.css b/docs/style.css
new file mode 100644
index 0000000..fa71155
--- /dev/null
+++ b/docs/style.css
@@ -0,0 +1,410 @@
+:root {
+ --primary-color: #4ecdc4;
+ --secondary-color: #2b9388;
+ --text-color: #333333;
+ --bg-color: #ffffff;
+ --light-bg: #f8fcfc;
+ --card-bg: #ffffff;
+ --border-radius: 12px;
+ --transition: all 0.3s ease;
+}
+
+* {
+ margin: 0;
+ padding: 0;
+ box-sizing: border-box;
+}
+
+body {
+ font-family: 'Inter', sans-serif;
+ color: var(--text-color);
+ line-height: 1.6;
+ background-color: var(--bg-color);
+}
+
+/* Typography */
+h1,
+h2,
+h3 {
+ font-weight: 700;
+ line-height: 1.2;
+}
+
+h1 {
+ font-size: 3.5rem;
+ margin-bottom: 1rem;
+ background: linear-gradient(45deg, var(--primary-color), var(--secondary-color));
+ -webkit-background-clip: text;
+ background-clip: text;
+ -webkit-text-fill-color: transparent;
+}
+
+h2 {
+ font-size: 2.5rem;
+ margin-bottom: 2rem;
+ text-align: center;
+}
+
+h3 {
+ font-size: 1.5rem;
+ margin-bottom: 1rem;
+ color: var(--secondary-color);
+}
+
+/* Layout */
+.container {
+ max-width: 1200px;
+ margin: 0 auto;
+ padding: 0 2rem;
+}
+
+section {
+ padding: 5rem 0;
+}
+
+/* Navigation */
+nav {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ padding: 1.5rem 0;
+}
+
+.logo {
+ font-size: 1.5rem;
+ font-weight: 800;
+ color: var(--secondary-color);
+ text-decoration: none;
+ display: flex;
+ align-items: center;
+ gap: 0.5rem;
+}
+
+.logo span {
+ color: var(--primary-color);
+}
+
+.nav-links a {
+ text-decoration: none;
+ color: var(--text-color);
+ margin-left: 2rem;
+ font-weight: 500;
+ transition: var(--transition);
+}
+
+.nav-links a:hover {
+ color: var(--primary-color);
+}
+
+.btn {
+ display: inline-block;
+ padding: 0.8rem 2rem;
+ border-radius: 50px;
+ text-decoration: none;
+ font-weight: 600;
+ transition: var(--transition);
+ cursor: pointer;
+}
+
+.btn-primary {
+ background: linear-gradient(90deg, var(--primary-color) 0%, var(--secondary-color) 100%);
+ color: white;
+ border: none;
+}
+
+.btn-primary:hover {
+ transform: translateY(-2px);
+ box-shadow: 0 4px 15px rgba(78, 205, 196, 0.4);
+}
+
+.btn-secondary {
+ background: transparent;
+ border: 2px solid var(--primary-color);
+ color: var(--secondary-color);
+ margin-left: 1rem;
+}
+
+.btn-secondary:hover {
+ background: rgba(78, 205, 196, 0.1);
+}
+
+/* Hero Section */
+.hero {
+ text-align: center;
+ padding: 6rem 0;
+ background: radial-gradient(circle at 50% 50%, rgba(78, 205, 196, 0.1) 0%, rgba(255, 255, 255, 0) 70%);
+}
+
+.hero p {
+ font-size: 1.25rem;
+ color: #666;
+ margin-bottom: 2.5rem;
+ max-width: 600px;
+ margin-left: auto;
+ margin-right: auto;
+}
+
+/* Hero Gallery */
+.hero-gallery {
+ max-width: 900px;
+ margin: 4rem auto 0;
+ background: #ffffff;
+ border-radius: var(--border-radius);
+ box-shadow: 0 20px 60px rgba(0, 0, 0, 0.1);
+ overflow: hidden;
+ border: 1px solid #eee;
+}
+
+.gallery-tabs {
+ display: flex;
+ background: #f8fcfc;
+ border-bottom: 1px solid #eee;
+}
+
+.gallery-tab {
+ flex: 1;
+ padding: 1rem;
+ border: none;
+ background: transparent;
+ font-weight: 600;
+ color: #666;
+ cursor: pointer;
+ transition: var(--transition);
+ border-bottom: 3px solid transparent;
+}
+
+.gallery-tab:hover {
+ background: rgba(78, 205, 196, 0.05);
+ color: var(--secondary-color);
+}
+
+.gallery-tab.active {
+ color: var(--secondary-color);
+ border-bottom-color: var(--primary-color);
+ background: #ffffff;
+}
+
+.gallery-content {
+ display: none;
+ padding: 1rem;
+ min-height: 400px;
+ background: #ffffff;
+ animation: fadeIn 0.3s ease;
+}
+
+.gallery-content.active {
+ display: block;
+}
+
+.gallery-image {
+ width: 100%;
+ height: auto;
+ border-radius: 8px;
+ display: block;
+}
+
+.gallery-placeholder {
+ height: 400px;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+ background: #f8fcfc;
+ border-radius: 8px;
+ color: #999;
+}
+
+.gallery-placeholder i {
+ font-size: 4rem;
+ margin-bottom: 1rem;
+ opacity: 0.3;
+}
+
+@keyframes fadeIn {
+ from {
+ opacity: 0.5;
+ transform: translateY(5px);
+ }
+
+ to {
+ opacity: 1;
+ transform: translateY(0);
+ }
+}
+
+/* Features Section */
+.features {
+ background-color: var(--light-bg);
+}
+
+.feature-grid {
+ display: grid;
+ grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
+ gap: 2rem;
+}
+
+.feature-card {
+ background: var(--card-bg);
+ padding: 2.5rem;
+ border-radius: var(--border-radius);
+ text-align: left;
+ transition: var(--transition);
+ border: 1px solid #eee;
+}
+
+.feature-card:hover {
+ transform: translateY(-5px);
+ box-shadow: 0 10px 30px rgba(0, 0, 0, 0.05);
+ border-color: var(--primary-color);
+}
+
+.icon {
+ font-size: 2.5rem;
+ margin-bottom: 1.5rem;
+ display: block;
+ color: var(--secondary-color);
+}
+
+/* How It Works Section */
+.how-it-works {
+ text-align: center;
+}
+
+.steps {
+ display: flex;
+ justify-content: center;
+ gap: 3rem;
+ flex-wrap: wrap;
+ margin-top: 3rem;
+}
+
+.step {
+ flex: 1;
+ min-width: 250px;
+ max-width: 300px;
+}
+
+.step-number {
+ width: 50px;
+ height: 50px;
+ background: var(--primary-color);
+ color: white;
+ border-radius: 50%;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ font-size: 1.5rem;
+ font-weight: 700;
+ margin: 0 auto 1.5rem;
+}
+
+/* Get Started / Installation */
+.get-started {
+ background: #2b9388;
+ color: white;
+ border-radius: 24px;
+ margin: 4rem auto;
+ text-align: center;
+ position: relative;
+ overflow: hidden;
+}
+
+.get-started h2,
+.get-started h3 {
+ color: white;
+}
+
+.code-block {
+ background: rgba(0, 0, 0, 0.3);
+ padding: 1.5rem;
+ border-radius: 8px;
+ font-family: 'Fira Code', monospace;
+ text-align: left;
+ display: inline-block;
+ margin: 1.5rem 0;
+ position: relative;
+ min-width: 300px;
+}
+
+.copy-btn {
+ position: absolute;
+ top: 10px;
+ right: 10px;
+ background: rgba(255, 255, 255, 0.2);
+ border: none;
+ color: white;
+ padding: 5px 10px;
+ border-radius: 4px;
+ font-size: 0.8rem;
+ cursor: pointer;
+}
+
+.copy-btn:hover {
+ background: rgba(255, 255, 255, 0.3);
+}
+
+/* Footer */
+footer {
+ padding: 3rem 0;
+ text-align: center;
+ border-top: 1px solid #eee;
+ color: #666;
+}
+
+.footer-links {
+ margin-bottom: 1.5rem;
+}
+
+.footer-links a {
+ color: var(--text-color);
+ text-decoration: none;
+ margin: 0 1rem;
+ transition: var(--transition);
+}
+
+.footer-links a:hover {
+ color: var(--primary-color);
+}
+
+/* Responsive */
+/* Responsive */
+.nav-toggle {
+ display: none;
+ font-size: 1.5rem;
+ color: var(--secondary-color);
+ cursor: pointer;
+}
+
+@media (max-width: 768px) {
+ h1 {
+ font-size: 2.5rem;
+ }
+
+ .nav-toggle {
+ display: block;
+ }
+
+ .nav-links {
+ display: none;
+ flex-direction: column;
+ position: absolute;
+ top: 80px;
+ left: 0;
+ right: 0;
+ background: white;
+ padding: 1rem;
+ box-shadow: 0 10px 20px rgba(0, 0, 0, 0.1);
+ text-align: center;
+ z-index: 100;
+ }
+
+ .nav-links.active {
+ display: flex;
+ animation: fadeIn 0.3s ease;
+ }
+
+ .nav-links a {
+ margin: 1rem 0;
+ display: block;
+ }
+}
\ No newline at end of file
diff --git a/pyproject.toml b/pyproject.toml
index 4e3d20f..ad0ce6b 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -1,6 +1,6 @@
[project]
name = "dora-eda"
-version = "4.0.1"
+version = "4.0.2"
description = "Exploratory data analysis and presentation tool"
authors = [
{name = "Asif Sayyed",email = "asifdotexe@gmail.com"}