from pathlib import Path import zipfile, textwrap, os, shutil base = Path("/mnt/data/melero-studio-website") if base.exists(): shutil.rmtree(base) base.mkdir() index = r''' Melero Studio | Texturas que transforman espacios

Melero Studio

Texturas que transforman espacios.

Paredes texturizadas, microcemento decorativo, limewash, acabados artesanales y piezas decorativas hechas a mano.

“Cada diseño es único, como tu huella.”

Paredes Texturizadas

Texturas artesanales que transforman y elevan cada espacio.

Microcemento Decorativo

Acabados continuos, modernos y resistentes de alta calidad.

Limewash

Acabados naturales y minerales que aportan calidez y profundidad.

Acabados Decorativos Artesanales

Técnicas artesanales que crean efectos únicos y personalizados.

Paredes de Acento

Destaca un espacio con textura, color y carácter inigualable.

Diseños Personalizados para Interiores

Diseños a medida que reflejan tu estilo y se adaptan a tu espacio.

Murales Texturizados

Murales artísticos con texturas que cuentan historias únicas.

Efectos Minerales y Arenosos

Efectos naturales que aportan movimiento, textura y profundidad.

Piezas Decorativas en Cemento

Piezas decorativas hechas a mano para interiores y exteriores.

Piezas Artesanales en Barro

Piezas únicas en barro, hechas a mano con técnicas tradicionales.

Cuadros Pintados a Mano

Obras de arte originales para decorar tus espacios.

Consultoría y Diseño de Acabados

Asesoría profesional para elegir los acabados perfectos para tu proyecto.

Ver todos los proyectos →

Paredes Texturizadas

San Juan, PR

Microcemento Decorativo

Caguas, PR

Baño Minimalista

Guaynabo, PR

Diseño Comercial

San Juan, PR

Espacios que Inspiran

Dorado, PR

Diseños artesanales que cuentan tu historia.

Melero Studio se especializa en la creación de paredes texturizadas, microcemento decorativo, limewash, acabados artesanales y piezas decorativas hechas a mano. Cada proyecto es diseñado de forma personalizada para transformar espacios residenciales y comerciales con texturas, colores y acabados únicos.

Conoce más
“El acabado de las paredes superó nuestras expectativas. Melero Studio tiene un talento increíble.”— Andrea R.
“Las piezas en barro le dieron a mi negocio una identidad única. ¡Totalmente recomendados!”— Javier M.
“Profesionales, creativos y responsables. Transformaron nuestro hogar en un espacio cálido y elegante.”— Nathalie P.
''' css = r'''@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&family=Playfair+Display:wght@500;600&display=swap'); :root{ --cream:#f3efe8; --sand:#d8c2aa; --tan:#b79b7b; --brown:#75604c; --dark:#171513; --muted:#6f665d; --white:#fffaf3; } *{box-sizing:border-box;margin:0;padding:0} html{scroll-behavior:smooth} body{ background:var(--cream); color:var(--dark); font-family:Inter, sans-serif; } a{color:inherit;text-decoration:none} img{max-width:100%} .navbar{ height:92px; padding:0 7%; display:flex; align-items:center; justify-content:space-between; background:#f7f3ed; position:sticky; top:0; z-index:20; box-shadow:0 1px 20px rgba(0,0,0,.04); } .logo{ display:flex; flex-direction:column; letter-spacing:6px; line-height:1; } .logo span{ font-family:"Playfair Display", serif; font-size:34px; } .logo small{ font-size:12px; text-align:center; letter-spacing:5px; margin-top:8px; } .nav-links{ display:flex; gap:42px; text-transform:uppercase; font-size:12px; font-weight:700; letter-spacing:1.5px; } .nav-links a{position:relative} .nav-links a:hover::after{ content:""; position:absolute; height:1px; background:var(--dark); left:0; right:0; bottom:-8px; } .whatsapp-btn{ background:var(--dark); color:white; padding:17px 25px; border-radius:5px; text-transform:uppercase; font-size:12px; font-weight:800; letter-spacing:.8px; } .hero{ min-height:690px; position:relative; display:flex; align-items:center; padding:90px 10%; background: linear-gradient(90deg, rgba(15,13,11,.94) 0%, rgba(30,25,20,.74) 36%, rgba(30,25,20,.18) 70%), url("https://images.unsplash.com/photo-1600566753190-17f0baa2a6c3?auto=format&fit=crop&w=1800&q=85"); background-size:cover; background-position:center; } .hero-content{ position:relative; color:white; max-width:520px; } .eyebrow,.section-label{ text-transform:uppercase; letter-spacing:5px; font-size:13px; color:#bda58e; font-weight:700; } .hero h1{ font-family:"Playfair Display", serif; font-size:68px; line-height:.98; margin:26px 0 18px; font-weight:500; } .line{ width:55px; height:1px; background:var(--white); margin:18px 0; } .hero p{ line-height:1.8; font-size:17px; } .slogan{ font-family:"Playfair Display", serif; font-style:italic; margin-top:18px; color:#f1e4d4; } .hero-actions{ display:flex; gap:25px; flex-wrap:wrap; margin-top:28px; } .btn{ display:inline-flex; padding:18px 30px; text-transform:uppercase; font-size:13px; font-weight:800; letter-spacing:.8px; } .primary{background:#ead5bd;color:#171513} .outline{border:1px solid rgba(255,255,255,.75);color:white} .dark-btn{background:#161412;color:white;margin-top:25px} .section{padding:55px 7%} .services{text-align:center} .section-line{ width:38px; height:1px; background:#bda58e; margin:17px auto 44px; } .service-grid{ display:grid; grid-template-columns:repeat(6,1fr); gap:0; } .service-grid article{ padding:20px 24px 30px; border-left:1px solid rgba(80,60,45,.2); } .service-grid article:nth-child(6n+1){border-left:0} .icon{ font-size:45px; color:#6e5544; margin-bottom:18px; min-height:58px; } .service-grid h3{ font-size:14px; text-transform:uppercase; line-height:1.4; margin-bottom:12px; } .service-grid p{ color:#4e4740; font-size:13px; line-height:1.7; } .section-top{ display:flex; justify-content:space-between; align-items:center; margin-bottom:20px; } .section-top a{ text-transform:uppercase; font-size:13px; letter-spacing:1.4px; font-weight:700; } .project-grid{ display:grid; grid-template-columns:repeat(5,1fr); gap:4px; } .project-card{ min-height:300px; background-size:cover; background-position:center; display:flex; align-items:flex-end; padding:22px; position:relative; overflow:hidden; } .project-card::before{ content:""; position:absolute; inset:0; background:linear-gradient(180deg, transparent 40%, rgba(0,0,0,.78)); } .project-card div{position:relative;color:white} .project-card h3{ text-transform:uppercase; font-size:14px; line-height:1.3; } .project-card p{font-size:13px;margin-top:6px} .p1{background-image:url("https://images.unsplash.com/photo-1618220179428-22790b461013?auto=format&fit=crop&w=700&q=85")} .p2{background-image:url("https://images.unsplash.com/photo-1600210491892-03d54c0aaf87?auto=format&fit=crop&w=700&q=85")} .p3{background-image:url("https://images.unsplash.com/photo-1600607688969-a5bfcd646154?auto=format&fit=crop&w=700&q=85")} .p4{background-image:url("https://images.unsplash.com/photo-1618220179428-22790b461013?auto=format&fit=crop&w=700&q=85")} .p5{background-image:url("https://images.unsplash.com/photo-1600566753086-00f18fb6b3ea?auto=format&fit=crop&w=700&q=85")} .about{ display:grid; grid-template-columns:42% 58%; background:#e8ded1; } .about-text{ padding:70px 12%; } .about h2{ font-family:"Playfair Display", serif; font-size:38px; line-height:1.08; margin:16px 0; font-weight:500; } .about p{ line-height:1.75; font-size:14px; color:#3f3934; } .dark{background:#171513} .about-image{ min-height:430px; background: linear-gradient(90deg, rgba(232,222,209,.05), rgba(232,222,209,.1)), url("https://images.unsplash.com/photo-1600210491369-e753d80a41f3?auto=format&fit=crop&w=1400&q=85"); background-size:cover; background-position:center; } .testimonials{ padding:55px 7%; text-align:center; } .testimonial-grid{ display:grid; grid-template-columns:repeat(3,1fr); gap:35px; margin-top:25px; } blockquote{ border-left:1px solid rgba(80,60,45,.18); padding:0 25px; color:#3f3934; line-height:1.7; font-size:14px; } blockquote::before{ content:"“"; display:block; color:#c4b4a2; font-family:"Playfair Display", serif; font-size:60px; line-height:.5; } blockquote span{ display:block; margin-top:12px; color:#75604c; font-size:13px; } .footer{ display:grid; grid-template-columns:1.4fr 1fr 1fr 1.4fr; gap:45px; background:#171513; color:#eee3d6; padding:55px 7%; } .footer h4{ text-transform:uppercase; letter-spacing:2px; font-size:13px; margin-bottom:18px; } .footer p{ font-size:14px; line-height:1.8; color:#c9b9a7; } .footer-logo span{font-size:35px} .contact-form{ display:grid; gap:10px; } .contact-form input,.contact-form textarea{ background:transparent; border:1px solid rgba(255,255,255,.25); color:white; padding:13px; font-family:inherit; } .contact-form button{ width:max-content; background:#ead5bd; border:0; padding:14px 28px; text-transform:uppercase; font-weight:800; cursor:pointer; } @media(max-width:1050px){ .nav-links{display:none} .service-grid{grid-template-columns:repeat(3,1fr)} .project-grid{grid-template-columns:repeat(2,1fr)} .about{grid-template-columns:1fr} .footer{grid-template-columns:1fr 1fr} } @media(max-width:650px){ .navbar{height:auto;padding:20px 5%;gap:15px} .logo span{font-size:27px} .whatsapp-btn{padding:13px 15px} .hero{min-height:650px;padding:70px 7%;background-position:center} .hero h1{font-size:47px} .service-grid{grid-template-columns:1fr} .service-grid article{border-left:0;border-top:1px solid rgba(80,60,45,.16)} .project-grid,.testimonial-grid,.footer{grid-template-columns:1fr} .section-top{align-items:flex-start;gap:15px;flex-direction:column} } ''' readme = '''# Melero Studio Website Static website for Melero Studio. ## How to upload to GitHub 1. Create a new repository on GitHub. 2. Upload these files: - `index.html` - `style.css` - `README.md` 3. Go to Vercel. 4. Click **Add New Project**. 5. Import your GitHub repository. 6. Deploy. 7. In Vercel, go to **Settings → Domains** and add: - `melerostudio.com` - `www.melerostudio.com` ## Contact info used Phone: (939) 489-0872 Email: melerostudio@gmail.com Location: Puerto Rico ''' (base / "index.html").write_text(index, encoding="utf-8") (base / "style.css").write_text(css, encoding="utf-8") (base / "README.md").write_text(readme, encoding="utf-8") zip_path = Path("/mnt/data/melero-studio-website.zip") if zip_path.exists(): zip_path.unlink() with zipfile.ZipFile(zip_path, "w", zipfile.ZIP_DEFLATED) as z: for file in base.rglob("*"): z.write(file, file.relative_to(base.parent)) zip_path.as_posix()