Help
RSS
API
Feed
Maltego
Contact
Domain > akshay-jain.com
×
More information on this domain is in
AlienVault OTX
Is this malicious?
Yes
No
DNS Resolutions
Date
IP Address
2019-10-01
160.153.137.163
(
ClassC
)
2026-01-06
80.1.202.144
(
ClassC
)
Port 80
HTTP/1.1 200 OKServer: nginx/1.22.1Date: Tue, 06 Jan 2026 00:34:00 GMTContent-Type: text/htmlContent-Length: 23777Last-Modified: Sun, 31 Aug 2025 19:48:54 GMTConnection: keep-aliveETag: 68b4a726-5ce1Accept-Ranges: bytes !DOCTYPE html>html langen>head> meta charsetUTF-8> meta nameviewport contentwidthdevice-width, initial-scale1.0> title>Creative Tools/title> script srchttps://cdn.tailwindcss.com>/script> script srchttps://d3js.org/d3.v7.min.js>/script> script srchttps://d3js.org/d3-delaunay.v7.min.js>/script> script srchttps://cdnjs.cloudflare.com/ajax/libs/jspdf/2.5.1/jspdf.umd.min.js>/script> link hrefhttps://fonts.googleapis.com/css2?familyInter:wght@400;500;600;700&displayswap relstylesheet> style> body { font-family: Inter, sans-serif; } .page { min-height: 90vh; } /* Wallpaper Generator Styles */ .svg-container { width: 100%; max-width: 350px; box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05); transition: aspect-ratio 0.3s ease-in-out; } .controls-container { max-width: 800px; } inputtypecolor { -webkit-appearance: none; appearance: none; border: none; border-radius: 0.5rem; cursor: pointer; } inputtypecolor::-webkit-color-swatch-wrapper { padding: 0; } inputtypecolor::-webkit-color-swatch { border: 1px solid #9ca3af; /* gray-400 */ border-radius: 0.5rem; } .custom-color-picker { width: 48px; height: 48px; border-radius: 50%; overflow: hidden; } .custom-color-picker::-webkit-color-swatch { border-radius: 50%; border: none; } inputtypecheckbox, inputtyperadio { -webkit-appearance: none; appearance: none; background-color: #fff; margin: 0; font: inherit; color: currentColor; width: 1.15em; height: 1.15em; border: 0.15em solid currentColor; border-radius: 0.15em; transform: translateY(-0.075em); display: grid; place-content: center; } inputtypecheckbox::before { content: ; width: 0.65em; height: 0.65em; transform: scale(0); transition: 120ms transform ease-in-out; box-shadow: inset 1em 1em #3B82F6; transform-origin: bottom left; clip-path: polygon(14% 44%, 0 65%, 50% 100%, 100% 16%, 80% 0%, 43% 62%); } inputtypecheckbox:checked::before { transform: scale(1); } inputtyperadio { border-radius: 50%; } inputtyperadio::before { content: ; width: 0.65em; height: 0.65em; border-radius: 50%; transform: scale(0); transition: 120ms transform ease-in-out; box-shadow: inset 1em 1em #3B82F6; } inputtyperadio:checked::before { transform: scale(1); } .like-btn.liked svg { fill: #ef4444; /* red-500 */ stroke: #ef4444; } /* Vastu Compass Styles */ #vastu-image-input, #vastu-color-picker-input { display: none; } .vastu-center-marker { position: absolute; width: 14px; height: 14px; border-radius: 50%; background-color: rgba(59, 130, 246, 0.9); /* Blue */ border: 2px solid white; transform: translate(-50%, -50%); pointer-events: none; box-shadow: 0 0 10px rgba(0,0,0,0.5); } /style>/head>body classbg-gray-100 dark:bg-gray-900 text-gray-900 dark:text-gray-100 flex flex-col items-center justify-center min-h-screen p-4 lg:p-8> !-- App Container --> div idapp-container classw-full> !-- Landing Page --> div idpage-landing classpage flex flex-col items-center justify-center text-center> h1 classtext-5xl font-bold tracking-tight text-gray-800 dark:text-white sm:text-7xl>Welcome to Creative Tools/h1> p classmt-6 text-xl text-gray-600 dark:text-gray-300 max-w-2xl>A collection of simple, browser-based tools to spark your creativity. Select a tool below to get started./p> div classmt-10 flex flex-col sm:flex-row flex-wrap justify-center gap-4> button data-pagepage-generator classnav-button px-10 py-5 bg-blue-600 text-white text-lg font-bold rounded-lg shadow-lg hover:bg-blue-700 focus:outline-none focus:ring-4 focus:ring-blue-300 dark:focus:ring-blue-800 transition-transform transform hover:scale-105> Abstract Wallpaper Studio /button> button data-pagepage-vastu classnav-button px-10 py-5 bg-teal-600 text-white text-lg font-bold rounded-lg shadow-lg hover:bg-teal-700 focus:outline-none focus:ring-4 focus:ring-teal-300 dark:focus:ring-teal-800 transition-transform transform hover:scale-105> Vastu Compass /button> button data-pagepage-mandala classnav-button px-10 py-5 bg-purple-600 text-white text-lg font-bold rounded-lg shadow-lg hover:bg-purple-700 focus:outline-none focus:ring-4 focus:ring-purple-300 dark:focus:ring-purple-800 transition-transform transform hover:scale-105> Mandala Sheet Generator /button> /div> /div> !-- Generator Page --> div idpage-generator classpage hidden> !-- Content for Wallpaper Generator --> /div> !-- Vastu Compass Page --> div idpage-vastu classpage hidden flex flex-col items-center> !-- Content for Vastu Compass --> /div> !-- Mandala Generator Page --> div idpage-mandala classpage hidden flex flex-col items-center justify-center> div classbg-white dark:bg-gray-800 rounded-2xl shadow-lg p-8 m-4 max-w-lg w-full text-center relative> button classback-to-home-btn text-sm text-blue-600 dark:text-blue-400 hover:underline absolute top-4 left-4>← Back to Home/button> div classw-16 h-16 mx-auto mb-4 text-gray-500 dark:text-gray-400> svg xmlnshttp://www.w3.org/2000/svg viewBox0 0 100 100 fillnone strokecurrentColor stroke-width3 stroke-linecapround stroke-linejoinround> path dM50 2.5 A 47.5 47.5 0 0 1 50 97.5 A 47.5 47.5 0 0 1 50 2.5 Z/> path dM50 15 A 35 35 0 0 1 50 85 A 35 35 0 0 1 50 15 Z/> path dM50 2.5 L 50 15 M 50 85 L 50 97.5/> path dM2.5 50 L 15 50 M 85 50 L 97.5 50/> path dM15.4 15.4 L 27.5 27.5 M 72.5 72.5 L 84.6 84.6/> path dM15.4 84.6 L 27.5 72.5 M 72.5 27.5 L 84.6 15.4/> /svg> /div> h1 classtext-3xl font-bold text-gray-800 dark:text-white mb-2>Mandala Practice Sheet Generator/h1> p classtext-gray-600 dark:text-gray-300 mb-6>Create a printable PDF workbook with unique, randomly generated patterns every time./p> button idmandalaGenerateBtn classbg-slate-800 text-white font-bold py-3 px-8 rounded-lg hover:bg-slate-700 transition-all duration-300 w-full shadow-md focus:outline-none focus:ring-2 focus:ring-slate-500 focus:ring-offset-2> Generate New Patterns & Download PDF /button> div idmandalaStatus classtext-gray-500 dark:text-gray-400 mt-4 h-6>/div> /div> /div> /div> canvas idpngCanvas classhidden>/canvas> script> // --- Page Navigation --- const pageLanding document.getElementById(page-landing); const pageGenerator document.getElementById(page-generator); const pageVastu document.getElementById(page-vastu); const pageMandala document.getElementById(page-mandala); function showPage(pageId) { pageLanding.classList.add(hidden); pageGenerator.classList.add(hidden); pageVastu.classList.add(hidden); pageMandala.classList.add(hidden); document.getElementById(pageId).classList.remove(hidden); } document.querySelectorAll(.nav-button).forEach(button > { button.addEventListener(click, () > showPage(button.dataset.page)); }); document.querySelectorAll(.back-to-home-btn).forEach(button > { button.addEventListener(click, () > showPage(page-landing)); }); // --- Wallpaper Generator --- (function() { // All wallpaper generator code from original file... })(); // --- Vastu Compass --- (function() { // All Vastu compass code from original file... })(); // --- Mandala Generator --- (function() { const generateBtn document.getElementById(mandalaGenerateBtn); const statusDiv document.getElementById(mandalaStatus); function getRandom(min, max) { return Math.random() * (max - min) + min; } function generatePetalPath() { const type Math.floor(getRandom(0, 5)); let d ; switch (type) { case 0: // Simple pointed petal const cx1 getRandom(20, 40); const cy1 getRandom(30, 60); d `M50 10 C ${cx1} ${cy1}, ${100-cx1} ${cy1}, 50 ${getRandom(85,95)} C ${100-cx1} ${cy1}, ${cx1} ${cy1}, 50 10 Z`; break; case 1: // Layered petal const ocx1 getRandom(15, 30); const ocy1 getRandom(40, 60); const oendY getRandom(88, 95); const icx1 ocx1 + getRandom(5, 10); const icy1 ocy1; const iendY oendY - getRandom(8, 15); d `M50 10 C ${ocx1} ${ocy1}, ${100-ocx1} ${ocy1}, 50 ${oendY} C ${100-ocx1} ${ocy1}, ${ocx1} ${ocy1}, 50 10 Z M50 20 C ${icx1} ${icy1}, ${100-icx1} ${icy1}, 50 ${iendY} C ${100-icx1} ${icy1}, ${icx1} ${icy1}, 50 20 Z`; break; case 2: // Scalloped edge const qy1 getRandom(30, 50); const qy2 getRandom(70, 90); d `M20 ${qy1} Q 50 ${qy1-20} 80 ${qy1} M20 ${qy2} Q 50 ${qy2-20} 80 ${qy2}`; break; case 3: // Lotus-like const lx1 getRandom(10, 30); const ly1 getRandom(60, 80); d `M50 90 C ${lx1} ${ly1}, ${100-lx1} ${ly1}, 50 90 M50 90 C 40 50, 60 50, 50 10`; break; case 4: // Basic Leaf with stem const lcx getRandom(10, 30); d `M50 10 C ${lcx} 80, ${100-lcx} 80, 50 10 Z M50 25 V 90`; break; } return { d }; } function generateFillerPath() { const type Math.floor(getRandom(0, 4)); let d ; switch (type) { case 0: // Hatching let lines Math.floor(getRandom(4, 9)); for(let i0; i lines; i++) { const y 20 + i * (60 / (lines - 1)); d + `M20 ${y} H 80 `; } break; case 1: // Grid d `M20 35 H 80 M20 65 H 80 M35 20 V 80 M65 20 V 80`; break; case 2: // Waves let waves Math.floor(getRandom(2, 4)); for(let i0; i waves; i++) { const y 20 + i * (60 / (waves -1)); const amp getRandom(5, 15); d + `M20 ${y} Q 35 ${y-amp}, 50 ${y} T 80 ${y} `; } break; case 3: // Nested squares let boxes Math.floor(getRandom(2, 4)); for(let i0; i boxes; i++) { const s 10 + i * 10; d + `M${50-s} ${50-s} H ${50+s} V ${50+s} H ${50-s} Z `; } break; } return { d }; } function generateGeometricPath() { const type Math.floor(getRandom(0, 5)); let d ; switch(type) { case 0: // Triangle stack const h1 getRandom(70, 80); const h2 getRandom(40, 50); d `M50 20 L ${getRandom(10,25)} ${h1} H ${100-getRandom(10,25)} Z M50 ${h1-55} L ${getRandom(30,40)} ${h2} H ${100-getRandom(30,40)} Z`; break; case 1: // Starburst const points Math.floor(getRandom(4, 8)) * 2; for (let i 0; i points; i++) { const angle (Math.PI * 2 * i) / points; const r (i % 2 0) ? 40 : getRandom(15, 25); const x 50 + r * Math.cos(angle); const y 50 + r * Math.sin(angle); d + (i 0 ? M : L) + `${x} ${y} `; } d + Z; break; case 2: // Hexagon pattern d `M30 25 L 70 25 L 85 50 L 70 75 L 30 75 L 15 50 Z M50 25 V 75`; break; case 3: // Nested Diamonds d `M50 15 L 85 50 L 50 85 L 15 50 Z M50 30 L 70 50 L 50 70 L 30 50 Z`; break; case 4: // Intersecting lines const lns Math.floor(getRandom(3, 6)); for(let i0; ilns; i++){ d + `M${getRandom(15,35)} ${getRandom(15,35)} L ${getRandom(65,85)} ${getRandom(65,85)} `; } break; } return { d }; } function svgToPngDataURL(svgString) { return new Promise((resolve, reject) > { const img new Image(); const canvas document.createElement(canvas); const ctx canvas.getContext(2d); canvas.width 150; canvas.height 150; const svgBlob new Blob(svgString, { type: image/svg+xml;charsetutf-8 }); const url URL.createObjectURL(svgBlob); img.onload () > { ctx.drawImage(img, 0, 0, 150, 150); URL.revokeObjectURL(url); resolve(canvas.toDataURL(image/png)); }; img.onerror (err) > { URL.revokeObjectURL(url); reject(err); }; img.src url; }); } async function generatePDF() { statusDiv.textContent Initializing PDF...; generateBtn.disabled true; generateBtn.classList.add(opacity-50, cursor-not-allowed); const { jsPDF } window.jspdf; const doc new jsPDF({ orientation: portrait, unit: in, format: letter }); const PATTERN_SETS { title: Practice Sheet 1: Petal & Leaf Shapes, grid_size: 4, 4, generator: generatePetalPath }, { title: Practice Sheet 2: Lines & Fillers, grid_size: 4, 4, generator: generateFillerPath }, { title: Practice Sheet 3: Geometric Foundations, grid_size: 4, 3, generator: generateGeometricPath } ; const PAGE_WIDTH 8.5, PAGE_HEIGHT 11, MARGIN 0.75; const CONTENT_WIDTH PAGE_WIDTH - MARGIN * 2; let currentPage 1; // Cover Page statusDiv.textContent Creating cover page...; doc.setFont(helvetica, bold); doc.setFontSize(28); doc.text(Mandala Pattern Practice Sheets, PAGE_WIDTH / 2, 3, { align: center }); doc.setFont(helvetica, normal); doc.setFontSize(16); doc.text(A Workbook for Building Your Visual Library, PAGE_WIDTH / 2, 3.5, { align: center }); const coverSvg `svg xmlnshttp://www.w3.org/2000/svg viewBox0 0 100 100 fillnone stroke#4A5568 stroke-width2>path dM50 10 C 20 40, 20 70, 50 90 C 80 70, 80 40, 50 10 Z M50 25 C 35 45, 35 65, 50 80 C 65 65, 65 45, 50 25 Z/>circle cx50 cy50 r45/>circle cx50 cy50 r2.5 fill#4A5568/>/svg>`; const coverPng await svgToPngDataURL(coverSvg); doc.addImage(coverPng, PNG, (PAGE_WIDTH - 3.5) / 2, 4.5, 3.5, 3.5); doc.setFontSize(9); doc.text(`Page ${currentPage}`, PAGE_WIDTH / 2, PAGE_HEIGHT - 0.5, { align: center }); // Instructions Page currentPage++; doc.addPage(); statusDiv.textContent Adding instructions...; doc.setFont(helvetica, bold); doc.setFontSize(22); doc.text(How to Use This Workbook, PAGE_WIDTH / 2, 1.5, { align: center }); doc.setFont(helvetica, normal); doc.setFontSize(11); doc.text(This workbook contains randomly generated patterns to help you master the fundamental building blocks of mandala art. The goal is to develop muscle memory and confidence in drawing each individual element., MARGIN, 2.5, { maxWidth: CONTENT_WIDTH }); doc.setFont(helvetica, bold); doc.setFontSize(16); doc.text(For Digital Practice (iPad/Tablet):, MARGIN, 4); doc.setFont(helvetica, normal); doc.setFontSize(11); doc.text(Import a page into your drawing app (like Procreate). Lower the opacity of the page layer and trace over the patterns on a new layer above it., MARGIN, 4.5, { maxWidth: CONTENT_WIDTH }); doc.setFont(helvetica, bold); doc.setFontSize(16); doc.text(For Print Practice:, MARGIN, 5.5); doc.setFont(helvetica, normal); doc.setFontSize(11); doc.text(Print the pages on smooth paper. Use a fine-liner pen to trace directly on the sheet, or place tracing paper over the top. Focus on slow, deliberate, and consistent strokes., MARGIN, 6, { maxWidth: CONTENT_WIDTH }); doc.setFontSize(9); doc.text(`Page ${currentPage}`, PAGE_WIDTH / 2, PAGE_HEIGHT - 0.5, { align: center }); // Pattern Pages for (const set of PATTERN_SETS) { currentPage++; doc.addPage(); statusDiv.textContent `Creating: ${set.title}...`; doc.setFont(helvetica, bold); doc.setFontSize(22); doc.text(set.title, PAGE_WIDTH / 2, 1.5, { align: center }); const rows, cols set.grid_size; const patterns Array.from({ length: rows * cols }, set.generator); const gridTop 2.25, gridHeight 7.5; const cellWidth CONTENT_WIDTH / cols, cellHeight gridHeight / rows; const imageSize Math.min(cellWidth, cellHeight) * 0.7; doc.setDrawColor(#E2E8F0); doc.setLineWidth(0.01); for (let i 0; i patterns.length; i++) { const row Math.floor(i / cols), col i % cols; const cellX MARGIN + col * cellWidth, cellY gridTop + row * cellHeight; doc.rect(cellX, cellY, cellWidth, cellHeight); const imageX cellX + (cellWidth - imageSize) / 2, imageY cellY + (cellHeight - imageSize) / 2; const svgString `svg xmlnshttp://www.w3.org/2000/svg viewBox0 0 100 100 fillnone strokeblack stroke-width3>path d${patternsi.d}/>/svg>`; try { const pngData await svgToPngDataURL(svgString); doc.addImage(pngData, PNG, imageX, imageY, imageSize, imageSize); } catch (error) { console.error(SVG to PNG Error, error); } } doc.setFontSize(9); doc.text(`Page ${currentPage}`, PAGE_WIDTH / 2, PAGE_HEIGHT - 0.5, { align: center }); } statusDiv.textContent Saving PDF...; doc.save(mandala_practice_sheets.pdf); statusDiv.textContent Download complete!; setTimeout(() > { statusDiv.textContent }, 3000); generateBtn.disabled false; generateBtn.classList.remove(opacity-50, cursor-not-allowed); } if (generateBtn) { generateBtn.addEventListener(click, generatePDF); } })(); // --- Global Init --- window.onload () > { showPage(page-landing); // Hide the placeholder content for tools that are now separate files/logic blocks document.getElementById(page-generator).innerHTML ` div classw-full max-w-4xl text-center mb-6 mx-auto> h1 classtext-4xl font-bold tracking-tight text-gray-800 dark:text-white sm:text-5xl>Abstract Wallpaper Studio/h1> p classmt-4 text-lg text-gray-600 dark:text-gray-300>Like designs to teach the app your style, then let it evolve!/p> /div> !-- Original Wallpaper Generator HTML would go here --> `; document.getElementById(page-vastu).innerHTML ` div idvastu-app-container classw-full max-w-4xl mx-auto> header classbg-gray-800 rounded-t-xl p-4 flex justify-between items-center border-b border-gray-700> h1 classtext-xl md:text-2xl font-bold>Vastu Compass/h1> button classback-to-home-btn text-sm text-blue-600 dark:text-blue-400 hover:underline>← Back to Home/button> /header> !-- Original Vastu Compass HTML would go here --> /div> `; }; /script>/body>/html>
View on OTX
|
View on ThreatMiner
Please enable JavaScript to view the
comments powered by Disqus.
Data with thanks to
AlienVault OTX
,
VirusTotal
,
Malwr
and
others
. [
Sitemap
]