1(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[246],{2040:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>o});var a=n(5155),l=n(2115),r=n(4684),i=n(6821);let s=[{key:"aisantamaker",label:"Santa Maker"},{key:"speechr",label:"Speechr: Text to Speech Reader"}];function o(){let[e,t]=(0,l.useState)(s[0].key);return(0,a.jsxs)("div",{className:"min-h-screen relative overflow-hidden",children:[(0,a.jsx)("div",{className:"absolute inset-0 w-full h-full",children:(0,a.jsx)(r.y,{})}),(0,a.jsxs)("div",{className:"relative z-10 container mx-auto px-6 py-20 md:py-32",children:[(0,a.jsxs)("div",{className:"text-center max-w-5xl mx-auto",children:[(0,a.jsx)("h1",{className:"text-6xl md:text-8xl font-bold mb-6 text-white drop-shadow-[0_4px_12px_rgba(0,0,0,0.8)]",children:"Our Work"}),(0,a.jsx)("p",{className:"text-lg md:text-xl text-white/90 drop-shadow mb-10 max-w-3xl mx-auto leading-relaxed",children:"Selected projects weâve built and shipped."})]}),(0,a.jsx)("div",{className:"backdrop-blur-md border border-white/20 rounded-2xl p-1 inline-flex mb-8 mx-auto",children:s.map(n=>(0,a.jsx)("button",{onClick:()=>t(n.key),className:"px-4 py-2 rounded-xl text-sm md:text-base font-semibold transition-all ".concat(e===n.key?"bg-white text-slate-900 shadow":"text-white/80 hover:text-white"),children:n.label},n.key))}),(0,a.jsx)("div",{className:"grid md:grid-cols-12 gap-6 max-w-5xl mx-auto",children:(0,a.jsxs)("div",{className:"md:col-start-2 md:col-span-10",children:[(0,a.jsx)("div",{className:"backdrop-blur-md rounded-2xl p-6 md:p-8 border border-white/20",children:(0,a.jsxs)("div",{className:"prose prose-invert max-w-none",children:["aisantamaker"===e&&(0,a.jsx)(c,{}),"speechr"===e&&(0,a.jsx)(d,{})]})}),(0,a.jsx)("div",{className:"mt-8"})]})}),(0,a.jsx)(i.A,{})]})]})}function c(){return(0,a.jsxs)("article",{className:"text-white/90 leading-relaxed",children:[(0,a.jsx)("h2",{className:"text-3xl md:text-4xl font-bold text-white mb-2",children:"Santa Maker"}),(0,a.jsx)("p",{className:"text-white/70 mb-6",children:"AI photo to Santa generator"}),(0,a.jsx)("p",{children:"A playful AI-powered web app that transforms your photos into festive Santa-styled images. Users upload a picture and get a high-quality, holiday-themed output in seconds."}),(0,a.jsxs)("ul",{className:"list-disc pl-6 mt-4 space-y-1",children:[(0,a.jsx)("li",{children:"Fast, clean UX with mobile-first design"}),(0,a.jsx)("li",{children:"AI-driven image generation with curated Santa styles"}),(0,a.jsx)("li",{children:"Shareable results optimized for social"})]}),(0,a.jsxs)("p",{className:"mt-6",children:["Visit: ",(0,a.jsx)("a",{className:"underline",href:"https://aisantamaker.com",target:"_blank",rel:"noopener noreferrer",children:"aisantamaker.com"})]})]})}function d(){return(0,a.jsxs)("article",{className:"text-white/90 leading-relaxed",children:[(0,a.jsx)("h2",{className:"text-3xl md:text-4xl font-bold text-white mb-2",children:"Speechr: Text to Speech Reader"}),(0,a.jsx)("p",{className:"text-white/70 mb-6",children:"Mobile app for natural text-to-speech"}),(0,a.jsx)("p",{children:"Speechr turns any text into clear, natural audio so you can listen on the go. Import articles, PDFs, or notes and play them back with high-quality voices, adjustable speed, and background playback."}),(0,a.jsxs)("ul",{className:"list-disc pl-6 mt-4 space-y-1",children:[(0,a.jsx)("li",{children:"Import from clipboard, files, or share sheet"}),(0,a.jsx)("li",{children:"Choose from multiple realistic voices"}),(0,a.jsx)("li",{children:"Offline queue and background playback"})]})]})}},4684:(e,t,n)=>{"use strict";n.d(t,{y:()=>r});var a=n(5155),l=n(2115);function r(){let e=(0,l.useRef)(null),t=(0,l.useRef)({camera:null,scene:null,renderer:null,uniforms:null,animationId:null});(0,l.useEffect)(()=>{let a=document.createElement("script");return a.src="https://cdnjs.cloudflare.com/ajax/libs/three.js/89/three.min.js",a.onload=()=>{e.current&&window.THREE&&n()},document.head.appendChild(a),()=>{t.current.animationId&&cancelAnimationFrame(t.current.animationId),t.current.renderer&&t.current.renderer.dispose(),document.head.removeChild(a)}},[]);let n=()=>
1{if(!e.current||!window.THREE)return;let n=window.THREE,a=e.current;a.innerHTML="";let l=new n.Camera;l.position.z=1;let r=new n.Scene,i=new n.PlaneBufferGeometry(2,2),s={time:{type:"f",value:1},resolution:{type:"v2",value:new n.Vector2}},o=new n.ShaderMaterial({uniforms:s,vertexShader:"\n void main() {\n gl_Position = vec4( position, 1.0 );\n }\n ",fragmentShader:"\n #define TWO_PI 6.2831853072\n #define PI 3.14159265359\n\n precision highp float;\n uniform vec2 resolution;\n uniform float time;\n \n float random (in float x) {\n return fract(sin(x)*1e4);\n }\n float random (vec2 st) {\n return fract(sin(dot(st.xy,\n vec2(12.9898,78.233)))*\n 43758.5453123);\n }\n \n varying vec2 vUv;\n\n void main(void) {\n vec2 uv = (gl_FragCoord.xy * 2.0 - resolution.xy) / min(resolution.x, resolution.y);\n \n vec2 fMosaicScal = vec2(4.0, 2.0);\n vec2 vScreenSize = vec2(256,256);\n uv.x = floor(uv.x * vScreenSize.x / fMosaicScal.x) / (vScreenSize.x / fMosaicScal.x);\n uv.y = floor(uv.y * vScreenSize.y / fMosaicScal.y) / (vScreenSize.y / fMosaicScal.y); \n \n float t = time*0.06+random(uv.x)*0.4;\n float lineWidth = 0.0008;\n\n vec3 color = vec3(0.0);\n for(int j = 0; j < 3; j++){\n for(int i=0; i < 5; i++){\n color[j] += lineWidth*float(i*i) / abs(fract(t - 0.01*float(j)+float(i)*0.01)*1.0 - length(uv)); \n }\n }\n\n gl_FragColor = vec4(color[2],color[1],color[0],1.0);\n }\n "}),c=new n.Mesh(i,o);r.add(c);let d=new n.WebGLRenderer;d.setPixelRatio(window.devicePixelRatio),a.appendChild(d.domElement),t.current={camera:l,scene:r,renderer:d,uniforms:s,animationId:null};let x=()=>{let e=a.getBoundingClientRect();d.setSize(e.width,e.height),s.resolution.value.x=d.domElement.width,s.resolution.value.y=d.domElement.height};x(),window.addEventListener("resize",x,!1);let m=()=>{t.current.animationId=requestAnimationFrame(m),s.time.value+=.05,d.render(r,l)};m()};return(0,a.jsx)("div",{ref:e,className:"w-full h-full absolute"})}},6821:(e,t,n)=>{"use strict";n.d(t,{A:()=>l});var a=n(5155);function l(){return(0,a.jsxs)("footer",{className:"container mx-auto px-6 py-8 text-center text-white/70 drop-shadow",children:[(0,a.jsxs)("div",{className:"flex items-center justify-center gap-3 mb-2",children:[(0,a.jsx)("img",{src:"/logo.png",alt:"Appnox Ltd logo",className:"h-6 w-6 rounded"}),(0,a.jsx)("span",{className:"text-white/80 text-sm",children:"Appnox Ltd"})]}),(0,a.jsxs)("p",{className:"text-sm space-x-2",children:[(0,a.jsx)("span",{children:"\xa9 2025 Appnox Ltd. All rights reserved."}),(0,a.jsx)("span",{children:"\xb7"}),(0,a.jsx)("a",{href:"/legal",className:"underline hover:text-white",children:"Legal"}),(0,a.jsx)("span",{children:"\xb7"}),(0,a.jsx)("a",{href:"mailto:[email protected]",className:"underline hover:text-white",children:"Support"}),(0,a.jsx)("span",{children:"\xb7"}),(0,a.jsx)("a",{href:"mailto:[email protected]",className:"underline hover:text-white",children:"[email protected]"})]}),(0,a.jsx)("p",{className:"text-xs text-white/60 mt-2 max-w-3xl mx-auto",children:"Registered in England & Wales (Company No. 16783468). APPNOX LTD, 71-75 Shelton Street, Covent Garden, London, United Kingdom, WC2H 9JQ. D-U-N-S: 234256309 \xb7 Phone: +90 539 480 4399"})]})}},8404:(e,t,n)=>{Promise.resolve().then(n.bind(n,2040))}},e=>{e.O(0,[441,964,358],()=>e(e.s=8404)),_N_E=e.O()}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.