Akshaymakhare's picture
Done β€” I created a vertical-section mockup like your image and saved it for download.
b29867c verified
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>WellPath Visualizer Pro</title>
<link rel="icon" type="image/x-icon" href="/static/favicon.ico">
<script src="https://cdn.tailwindcss.com"></script>
<script src="https://unpkg.com/feather-icons"></script>
<script src="https://cdn.jsdelivr.net/npm/feather-icons/dist/feather.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/vanta@latest/dist/vanta.globe.min.js"></script>
<style>
.well-path {
stroke-dasharray: 1000;
stroke-dashoffset: 1000;
animation: dash 5s linear forwards;
}
@keyframes dash {
to {
stroke-dashoffset: 0;
}
}
.grid-line {
stroke-opacity: 0.2;
}
.formation-layer {
opacity: 0;
animation: fadeIn 1s forwards;
animation-delay: 1s;
}
@keyframes fadeIn {
to {
opacity: 0.7;
}
}
</style>
</head>
<body class="bg-gray-900 text-white min-h-screen">
<div id="vanta-bg" class="fixed inset-0 z-0"></div>
<div class="relative z-10 container mx-auto px-4 py-12">
<!-- Header -->
<header class="mb-16 text-center">
<h1 class="text-5xl font-bold mb-4 bg-clip-text text-transparent bg-gradient-to-r from-blue-400 to-teal-400">
WellPath Visualizer Pro
</h1>
<p class="text-xl text-gray-300 max-w-3xl mx-auto">
Advanced well trajectory visualization with custom styling, real data integration, and professional export options
</p>
</header>
<!-- Main Content -->
<div class="grid md:grid-cols-2 gap-12 items-center">
<!-- Visualization Panel -->
<div class="bg-gray-800/80 backdrop-blur-md rounded-xl p-6 shadow-2xl border border-gray-700">
<div class="flex justify-between items-center mb-6">
<h2 class="text-2xl font-semibold">Well Trajectory Mockup</h2>
<div class="flex space-x-2">
<button class="p-2 rounded-full bg-gray-700 hover:bg-gray-600 transition">
<i data-feather="download"></i>
</button>
<button class="p-2 rounded-full bg-gray-700 hover:bg-gray-600 transition">
<i data-feather="settings"></i>
</button>
</div>
</div>
<div class="relative h-96">
<svg viewBox="0 0 800 500" class="w-full h-full">
<!-- Grid -->
<g class="grid-line">
<line x1="50" y1="50" x2="50" y2="450" stroke="white" stroke-width="1" />
<line x1="50" y1="450" x2="750" y2="450" stroke="white" stroke-width="1" />
<!-- Vertical ticks -->
<line x1="45" y1="50" x2="50" y2="50" stroke="white" stroke-width="1" />
<line x1="45" y1="150" x2="50" y2="150" stroke="white" stroke-width="1" />
<line x1="45" y1="250" x2="50" y2="250" stroke="white" stroke-width="1" />
<line x1="45" y1="350" x2="50" y2="350" stroke="white" stroke-width="1" />
<!-- Horizontal ticks -->
<line x1="150" y1="450" x2="150" y2="455" stroke="white" stroke-width="1" />
<line x1="250" y1="450" x2="250" y2="455" stroke="white" stroke-width="1" />
<line x1="350" y1="450" x2="350" y2="455" stroke="white" stroke-width="1" />
<line x1="450" y1="450" x2="450" y2="455" stroke="white" stroke-width="1" />
<line x1="550" y1="450" x2="550" y2="455" stroke="white" stroke-width="1" />
<line x1="650" y1="450" x2="650" y2="455" stroke="white" stroke-width="1" />
<line x1="750" y1="450" x2="750" y2="455" stroke="white" stroke-width="1" />
</g>
<!-- Well Path -->
<path class="well-path" d="M50,50 C150,50 250,150 350,250 L550,350 C650,350 750,400 750,450"
stroke="url(#wellGradient)" stroke-width="4" fill="none" />
<!-- Casing Boxes -->
<rect x="40" y="50" width="20" height="100" fill="none" stroke="#3b82f6" stroke-width="2" />
<rect x="35" y="150" width="30" height="150" fill="none" stroke="#3b82f6" stroke-width="2" />
<rect x="30" y="300" width="40" height="150" fill="none" stroke="#3b82f6" stroke-width="2" />
<!-- Formation Layers -->
<rect class="formation-layer" x="50" y="200" width="700" height="50" fill="#10b981" />
<rect class="formation-layer" x="50" y="300" width="700" height="50" fill="#f59e0b" />
<rect class="formation-layer" x="50" y="400" width="700" height="50" fill="#ef4444" />
<!-- Perforation Markers -->
<circle cx="350" cy="250" r="5" fill="#ec4899" />
<circle cx="450" cy="300" r="5" fill="#ec4899" />
<circle cx="550" cy="350" r="5" fill="#ec4899" />
<!-- Gradient for well path -->
<defs>
<linearGradient id="wellGradient" x1="0%" y1="0%" x2="100%" y2="0%">
<stop offset="0%" stop-color="#3b82f6" />
<stop offset="100%" stop-color="#8b5cf6" />
</linearGradient>
</defs>
</svg>
</div>
<div class="mt-6 flex justify-between text-sm text-gray-400">
<span>Surface</span>
<span>Kickoff Point</span>
<span>Build Section</span>
<span>Lateral</span>
</div>
</div>
<!-- Control Panel -->
<div class="bg-gray-800/80 backdrop-blur-md rounded-xl p-6 shadow-2xl border border-gray-700">
<h2 class="text-2xl font-semibold mb-6">Customize Your Well Path</h2>
<div class="space-y-6">
<!-- Data Upload -->
<div>
<h3 class="text-lg font-medium mb-3">Upload Your Data</h3>
<div class="border-2 border-dashed border-gray-600 rounded-lg p-6 text-center hover:border-blue-500 transition cursor-pointer">
<i data-feather="upload" class="w-12 h-12 mx-auto text-gray-400 mb-3"></i>
<p class="text-gray-300">Drag & drop your directional survey CSV</p>
<p class="text-sm text-gray-500 mt-1">(MD, Inc, Azi columns required)</p>
</div>
</div>
<!-- Styling Options -->
<div>
<h3 class="text-lg font-medium mb-3">Visual Styling</h3>
<div class="grid grid-cols-2 gap-4">
<div>
<label class="block text-sm font-medium text-gray-300 mb-1">Primary Color</label>
<select class="w-full bg-gray-700 border border-gray-600 rounded-md px-3 py-2 text-white">
<option>Blue</option>
<option>Teal</option>
<option>Indigo</option>
<option>Purple</option>
<option>Custom...</option>
</select>
</div>
<div>
<label class="block text-sm font-medium text-gray-300 mb-1">Secondary Color</label>
<select class="w-full bg-gray-700 border border-gray-600 rounded-md px-3 py-2 text-white">
<option>Purple</option>
<option>Pink</option>
<option>Red</option>
<option>Orange</option>
<option>Custom...</option>
</select>
</div>
</div>
</div>
<!-- Additional Features -->
<div>
<h3 class="text-lg font-medium mb-3">Additional Features</h3>
<div class="space-y-3">
<label class="flex items-center space-x-3">
<input type="checkbox" class="form-checkbox h-5 w-5 text-blue-500 rounded">
<span class="text-gray-300">Show Formation Layers</span>
</label>
<label class="flex items-center space-x-3">
<input type="checkbox" class="form-checkbox h-5 w-5 text-blue-500 rounded" checked>
<span class="text-gray-300">Show Casing Design</span>
</label>
<label class="flex items-center space-x-3">
<input type="checkbox" class="form-checkbox h-5 w-5 text-blue-500 rounded" checked>
<span class="text-gray-300">Show Perforations</span>
</label>
</div>
</div>
<!-- Action Buttons -->
<div class="pt-4">
<button class="w-full bg-gradient-to-r from-blue-500 to-purple-600 hover:from-blue-600 hover:to-purple-700 text-white font-medium py-3 px-4 rounded-lg transition shadow-lg">
Generate Visualization
</button>
</div>
</div>
</div>
</div>
<!-- Export Options -->
<div class="mt-16 bg-gray-800/80 backdrop-blur-md rounded-xl p-6 shadow-2xl border border-gray-700 max-w-4xl mx-auto">
<h2 class="text-2xl font-semibold mb-6 text-center">Export Options</h2>
<div class="grid md:grid-cols-3 gap-6">
<div class="text-center p-4 rounded-lg bg-gray-700/50 hover:bg-gray-700 transition cursor-pointer">
<i data-feather="image" class="w-10 h-10 mx-auto text-blue-400 mb-3"></i>
<h3 class="font-medium mb-1">High-Res PNG</h3>
<p class="text-sm text-gray-400">300+ DPI for presentations</p>
</div>
<div class="text-center p-4 rounded-lg bg-gray-700/50 hover:bg-gray-700 transition cursor-pointer">
<i data-feather="file-text" class="w-10 h-10 mx-auto text-purple-400 mb-3"></i>
<h3 class="font-medium mb-1">PDF Report</h3>
<p class="text-sm text-gray-400">Vector format with metadata</p>
</div>
<div class="text-center p-4 rounded-lg bg-gray-700/50 hover:bg-gray-700 transition cursor-pointer">
<i data-feather="box" class="w-10 h-10 mx-auto text-teal-400 mb-3"></i>
<h3 class="font-medium mb-1">DXF (CAD)</h3>
<p class="text-sm text-gray-400">For engineering applications</p>
</div>
</div>
</div>
</div>
<script>
// Initialize Vanta.js background
VANTA.GLOBE({
el: "#vanta-bg",
mouseControls: true,
touchControls: true,
gyroControls: false,
minHeight: 200.00,
minWidth: 200.00,
scale: 1.00,
scaleMobile: 1.00,
color: 0x3b82f6,
backgroundColor: 0x111827,
size: 0.7
});
// Initialize feather icons
feather.replace();
// Simple animation for the well path
document.addEventListener('DOMContentLoaded', () => {
const path = document.querySelector('.well-path');
path.style.strokeDashoffset = "0";
});
</script>
</body>
</html>