From 22fade091daf7e6da49603bbd0e0cdd905b9ec80 Mon Sep 17 00:00:00 2001 From: suvodip ghosh Date: Thu, 12 Jun 2025 06:42:01 +0000 Subject: [PATCH] s1 --- package-lock.json | 10 + package.json | 3 +- public/assets/js/index.min.js | 12 + .../BuyServices/NewKubernetisUtho.jsx | 433 ++++++++++++++++++ src/components/DomainSetupForm.jsx | 100 ++-- src/components/ServiceCard.tsx | 21 +- src/components/Tools/ImageResize.jsx | 132 ++++++ src/layouts/Layout.astro | 62 +-- src/pages/index.astro | 30 ++ src/pages/services/index.astro | 213 ++++++--- src/pages/services/kubernetis.astro | 7 + src/pages/topic/index.astro | 2 +- src/pages/web-tools/image-resize.astro | 40 ++ yarn.lock | 5 + 14 files changed, 914 insertions(+), 156 deletions(-) create mode 100644 public/assets/js/index.min.js create mode 100644 src/components/BuyServices/NewKubernetisUtho.jsx create mode 100644 src/components/Tools/ImageResize.jsx create mode 100644 src/pages/services/kubernetis.astro create mode 100644 src/pages/web-tools/image-resize.astro diff --git a/package-lock.json b/package-lock.json index 906a82a..951d6ec 100644 --- a/package-lock.json +++ b/package-lock.json @@ -25,6 +25,7 @@ "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", "date-fns": "^4.1.0", + "image-resize-compress": "^2.1.1", "lucide-react": "^0.484.0", "marked": "^15.0.8", "menubar": "^9.5.1", @@ -7737,6 +7738,15 @@ ], "license": "BSD-3-Clause" }, + "node_modules/image-resize-compress": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/image-resize-compress/-/image-resize-compress-2.1.1.tgz", + "integrity": "sha512-aF4O1ZzAM0wDziIQZdqlxvDBe163J1Kiu+hSXbYNaGDcD4ggqAgRLLtRmpspnpJPHa4PkhVjwOshzBMHbOWESQ==", + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/import-fresh": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", diff --git a/package.json b/package.json index 14edab5..310ba23 100644 --- a/package.json +++ b/package.json @@ -27,6 +27,7 @@ "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", "date-fns": "^4.1.0", + "image-resize-compress": "^2.1.1", "lucide-react": "^0.484.0", "marked": "^15.0.8", "menubar": "^9.5.1", @@ -48,4 +49,4 @@ "xlsx": "^0.18.5" }, "packageManager": "yarn@1.22.22+sha512.a6b2f7906b721bba3d67d4aff083df04dad64c399707841b7acf00f6b133b7ac24255f2652fa22ae3534329dc6180534e98d17432037ff6fd140556e2bb3137e" -} \ No newline at end of file +} diff --git a/public/assets/js/index.min.js b/public/assets/js/index.min.js new file mode 100644 index 0000000..aa0a8f9 --- /dev/null +++ b/public/assets/js/index.min.js @@ -0,0 +1,12 @@ +/** + * Skipped minification because the original files appears to be already minified. + * Original file: /npm/image-resize-compress@2.1.1/dist/index.js + * + * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files + */ +var h=e=>({png:"image/png",webp:"image/webp",bmp:"image/bmp",gif:"image/gif",jpeg:"image/jpeg"})[e]||"image/jpeg",w=(e,t="auto",r="auto")=>{let o=t==="auto"||t===0,m=r==="auto"||r===0;if(!o&&!m)return{width:t,height:r};if(!o){let n=e.naturalWidth/t;return{width:t,height:Math.round((e.naturalHeight/n+Number.EPSILON)*100)/100}}if(!m){let n=e.naturalHeight/r;return{width:Math.round((e.naturalWidth/n+Number.EPSILON)*100)/100,height:r}}return{width:e.naturalWidth,height:e.naturalHeight}},E=async(e,t=100,r="auto",o="auto",m=null,n=null)=>{if(!(e instanceof Blob))throw new TypeError(`Expected a Blob or File, but got ${typeof e}.`);if(e.size===0)throw new Error("Failed to load the image. The file might be corrupt or empty.");if(t<=0)throw new RangeError("Quality must be greater than 0.");if(typeof r=="number"&&r<0||typeof o=="number"&&o<0)throw new RangeError("Invalid width or height value!");let a=m?h(m):e.type,g=t<1?t:t/100;return new Promise((p,l)=>{let u=new FileReader;u.onload=()=>{let s=new Image;s.src=u.result,s.onload=()=>{let i=document.createElement("canvas"),d=w(s,r,o);i.width=d.width,i.height=d.height;let f=i.getContext("2d");if(!f){l(new Error("Failed to get canvas context."));return}n&&a==="image/png"&&(f.fillStyle=n,f.fillRect(0,0,i.width,i.height)),f.drawImage(s,0,0,i.width,i.height),i.toBlob(b=>{if(b===null)return l(new Error("Failed to generate image blob."));p(new Blob([b],{type:a}))},a,g)},s.onerror=()=>{l(new Error("Failed to load the image. The file might be corrupt or empty."))}},u.onerror=()=>l(new Error("Failed to read the blob as a Data URL.")),u.readAsDataURL(e)})},c=E;var F=async(e,t=100,r="auto",o="auto",m,n)=>{try{let a=await fetch(e,n);if(!a.ok)throw new Error(`Failed to fetch image: ${a.statusText}`);let g=await a.blob();return await c(g,t,r,o,m)}catch(a){throw new Error(`Failed to process the image from URL. Check CORS or network issues. Error: ${a}`)}},y=F;var I=e=>new Promise((t,r)=>{if(e.size===0)return r(new Error("Cannot convert empty Blob."));if(e.size>10485760)return r(new Error("File size exceeds the maximum allowed limit."));let o=new FileReader;o.onloadend=()=>{o.result?t(o.result):r(new Error("Failed to convert blob to DataURL."))},o.onerror=()=>r(new Error("Error reading blob.")),o.readAsDataURL(e)}),R=I;var L=async(e,t)=>{try{let r=await fetch(e,t);if(!r.ok)throw new Error(`Failed to fetch image: ${r.statusText}`);return await r.blob()}catch(r){throw new Error(`Failed to fetch image from URL. Error: ${r}`)}},T=L;export{R as blobToURL,c as fromBlob,y as fromURL,T as urlToBlob}; +/*! + * image-resize-compress + * Copyright(c) 2024 Álef Duarte + * MIT Licensed + */ \ No newline at end of file diff --git a/src/components/BuyServices/NewKubernetisUtho.jsx b/src/components/BuyServices/NewKubernetisUtho.jsx new file mode 100644 index 0000000..e9a5bd9 --- /dev/null +++ b/src/components/BuyServices/NewKubernetisUtho.jsx @@ -0,0 +1,433 @@ +import React, { useState, useEffect } from "react"; +import { Button } from '../ui/button'; +import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "../ui/card"; +import { Select, SelectTrigger, SelectValue, SelectContent, SelectItem } from "../ui/select"; +import { Input } from "../ui/input"; +import { Label } from "../ui/label"; +import Loader from "../ui/loader"; +import { useToast } from "../ui/toast"; +import { Switch } from "../ui/switch"; + +export default function NewKubernetesService() { + const { showToast } = useToast(); + const [isLoading, setIsLoading] = useState(false); + const [isFetchingData, setIsFetchingData] = useState(true); + const [plans, setPlans] = useState([]); + const [vpcs, setVpcs] = useState([]); + const UTHO_API_KEY = "Bearer IoNXhkRJsQPyOEqFMceSfzuKaDLrpxUCATgZjiVdvYlBHbwWmGtn"; + + const [formData, setFormData] = useState({ + datacenter: "mumbai", + plan: "", + name: "", + k8s_version: "1.27", + nodes: 1, + storage: "50", + public_ip: true, + auto_scaling: false, + min_nodes: 1, + max_nodes: 3, + vpc: "", + subnet: "" + }); + + useEffect(() => { + const fetchInitialData = async () => { + setIsFetchingData(true); + try { + const [plansResponse, vpcsResponse] = await Promise.all([ + fetch("https://api.utho.com/v2/plans", { + headers: { + "Authorization": UTHO_API_KEY, + "Content-Type": "application/json" + } + }), + fetch("https://api.utho.com/v2/vpc", { + headers: { + "Authorization": UTHO_API_KEY, + "Content-Type": "application/json" + } + }) + ]); + + const plansData = await plansResponse.json(); + const vpcsData = await vpcsResponse.json(); +console.log('vpcsData.vpc', vpcsData.vpc) + setPlans(plansData.plans || []); + setVpcs(vpcsData.vpc || []); + + // Set default VPC and subnet if available + if (vpcsData.vpc?.length > 0) { + const firstVpc = vpcsData.vpc[0]; + const firstSubnet = firstVpc.subnets?.[0]?.id || ""; + setFormData(prev => ({ + ...prev, + vpc: firstVpc.id, + subnet: firstSubnet + })); + } + } catch (error) { + console.error("Initial data fetch error:", error); + showToast({ + title: "Error", + description: "Failed to load initial configuration data", + variant: "destructive" + }); + } finally { + setIsFetchingData(false); + } + }; + + fetchInitialData(); + }, []); + + const handleVpcChange = (vpcId) => { + const selectedVpc = vpcs.find(vpc => vpc.id === vpcId); + const firstSubnet = selectedVpc?.subnet?.[0]?.id || ""; + setFormData(prev => ({ + ...prev, + vpc: vpcId, + subnet: firstSubnet + })); + }; + + const getCurrentSubnets = () => { + const selectedVpc = vpcs.find(vpc => vpc.id === formData.vpc); + return selectedVpc?.subnets || []; + }; + + const handleSubmit = async (e) => { + e.preventDefault(); + setIsLoading(true); + + try { + if (!formData.vpc || !formData.subnet) { + throw new Error("Please select both VPC and Subnet to proceed"); + } + + const payload = { + datacenter: formData.datacenter, + plan: formData.plan, + name: formData.name, + k8s_version: formData.k8s_version, + nodes: formData.nodes, + storage: formData.storage, + public_ip: formData.public_ip, + vpc: formData.vpc, + subnet: formData.subnet + }; + + if (formData.auto_scaling) { + payload.auto_scaling = true; + payload.min_nodes = formData.min_nodes; + payload.max_nodes = formData.max_nodes; + } + + const response = await fetch("https://api.utho.com/v2/kubernetes/deploy", { + method: "POST", + headers: { + "Authorization": UTHO_API_KEY, + "Content-Type": "application/json" + }, + body: JSON.stringify(payload) + }); + + const data = await response.json(); + + if (!response.ok) { + throw new Error(data.message || "Failed to deploy Kubernetes cluster"); + } + + if (data.status === "success") { + showToast({ + title: "Success", + description: `Cluster ${data.cluster_id || data.id} is being deployed`, + variant: "success" + }); + setFormData(prev => ({ + ...prev, + name: "", + plan: "", + nodes: 1 + })); + } else { + throw new Error(data.message || "Failed to deploy Kubernetes cluster"); + } + } catch (error) { + showToast({ + title: "Deployment Failed", + description: error.message, + variant: "destructive" + }); + console.error("Deployment error:", error); + } finally { + setIsLoading(false); + } + }; + + const handleChange = (e) => { + const { name, value, type, checked } = e.target; + setFormData(prev => ({ + ...prev, + [name]: type === "checkbox" ? checked : value + })); + }; + + if (isFetchingData) { + return ( +
+ + Loading configuration... +
+ ); + } + + const currentSubnets = getCurrentSubnets(); + + return ( + + + Deploy New Kubernetes Cluster + + Configure your Kubernetes cluster with the required parameters + + + +
+ {/* Name, Datacenter, and Kubernetes Version fields */} +
+ + +
+ +
+
+ + +
+ +
+ + +
+
+ + {/* Node Plan and Count */} +
+
+ + +
+ +
+ + +
+
+ + {/* VPC and Subnet Selection */} +
+
+ + +
+ +
+ + + {currentSubnets.length === 0 && formData.vpc && ( +

+ No subnets found in this VPC. Please create a subnet first. +

+ )} +
+
+ + {/* Storage and Advanced Options */} +
+ + +
+ +
+

Advanced Options

+
+
+ setFormData({...formData, public_ip: checked})} + /> + +
+ +
+ setFormData({...formData, auto_scaling: checked})} + /> + +
+ + {formData.auto_scaling && ( +
+
+ + +
+
+ + +
+
+ )} +
+
+ +
+ +
+
+
+
+ ); +} \ No newline at end of file diff --git a/src/components/DomainSetupForm.jsx b/src/components/DomainSetupForm.jsx index 9a70609..ef9a682 100644 --- a/src/components/DomainSetupForm.jsx +++ b/src/components/DomainSetupForm.jsx @@ -57,6 +57,14 @@ export const DomainSetupForm = ({ defaultSubdomain }) => { hestia: { monthly: 200, yearly: 2000 } }; + const handleDeploymentType = (e) => { + console.log('setDeploymentType ',e.target.value); + setDeploymentType(e.target.value); + if(e.target.value === 'vpn'){ + window.location.href = '/services/buy-vpn'; + } + } + // Show toast notification const showToast = useCallback((message) => { setToast({ visible: true, message }); @@ -451,54 +459,54 @@ export const DomainSetupForm = ({ defaultSubdomain }) => { ); - case 'vpn': - return ( - <> -
- - -
+ // case 'vpn': + // return ( + // <> + //
+ // + // + //
- -
- + // + //
+ // - -
-
- {selectedCycle && ( -

You selected {selectedCycle} plan at ₹{selectedPrice}

- )} -
+ // + //
+ //
+ // {selectedCycle && ( + //

You selected {selectedCycle} plan at ₹{selectedPrice}

+ // )} + //
- - - ); + // + // + // ); default: return null; @@ -514,7 +522,7 @@ export const DomainSetupForm = ({ defaultSubdomain }) => { + +
+ + setImgQuality(e.target.value)} + className="w-full accent-[#6d9e37]" + /> +
+ + {previewUrl && ( +
+
+

+ Original Size: {originalSize} KB +

+

+ Resized Size: {resizedSize} KB +

+
+ +
+

Preview:

+ Resized Preview +
+ + +
+ )} + + + ); +} diff --git a/src/layouts/Layout.astro b/src/layouts/Layout.astro index e691e49..bda8331 100644 --- a/src/layouts/Layout.astro +++ b/src/layouts/Layout.astro @@ -2,50 +2,12 @@ import '../styles/global.css'; import LoginProfile from '../components/LoginOrProfile'; -interface Props { - title: string; - description?: string; - ogImage?: string; - canonicalURL?: string; - type?: 'website' | 'article'; -} +interface Props { title: string; description?: string; ogImage?: string; canonicalURL?: string; type?: 'website' | 'article'; newSchema1 : string} -const { - title, - description = "SiliconPin offers high-performance hosting solutions for PHP, Node.js, Python, K8s, and K3s applications with 24/7 support.", - ogImage, - canonicalURL = new URL(Astro.url.pathname, Astro.site).href, - type = "website", -} = Astro.props; +const { title, description, ogImage, canonicalURL = new URL(Astro.url.pathname, Astro.site).href, type = "website", newSchema1} = Astro.props; // Organization schema -const organizationSchema = { - "@context": "https://schema.org", - "@type": "Organization", - "name": "SiliconPin", - "url": "https://siliconpin.com", - "logo": "https://siliconpin.com/assets/logo.svg", - "contactPoint": { - "@type": "ContactPoint", - "telephone": "+91-700-160-1485", - "contactType": "customer service", - "availableLanguage": ["English", "Hindi", "Bengali"] - }, - "address": { - "@type": "PostalAddress", - "streetAddress": "121 Lalbari, GourBongo Road", - "addressLocality": "Habra", - "addressRegion": "W.B.", - "postalCode": "743271", - "addressCountry": "India" - }, - "sameAs": [ - "https://www.linkedin.com/company/siliconpin", - "https://x.com/dwd_consultancy", - "https://www.facebook.com/profile.php?id=100088549643337", - "https://instagram.com/siliconpin.com_" - ] -}; + --- @@ -83,7 +45,9 @@ const organizationSchema = { - + + @@ -96,12 +60,12 @@ const organizationSchema = {
@@ -112,11 +76,11 @@ const organizationSchema = {
@@ -170,8 +134,8 @@ const organizationSchema = {

Services

@@ -226,7 +190,7 @@ const organizationSchema = { Services - +
diff --git a/src/pages/index.astro b/src/pages/index.astro index 0473f59..90bd8d9 100644 --- a/src/pages/index.astro +++ b/src/pages/index.astro @@ -1,6 +1,34 @@ --- import Layout from '../layouts/Layout.astro'; +const schema1 = { + "@context": "https://schema.org", + "@type": "Organization", + "name": "SiliconPin", + "url": "https://siliconpin.com", + "logo": "https://siliconpin.com/assets/logo.svg", + "contactPoint": { + "@type": "ContactPoint", + "telephone": "+91-700-160-1485", + "contactType": "customer service", + "availableLanguage": ["English", "Hindi", "Bengali"] + }, + "address": { + "@type": "PostalAddress", + "streetAddress": "121 Lalbari, GourBongo Road", + "addressLocality": "Habra", + "addressRegion": "W.B.", + "postalCode": "743271", + "addressCountry": "India" + }, + "sameAs": [ + "https://www.linkedin.com/company/siliconpin", + "https://x.com/dwd_consultancy", + "https://www.facebook.com/profile.php?id=100088549643337", + "https://instagram.com/siliconpin.com_" + ] +}; + // Page-specific SEO metadata const pageTitle = "SiliconPin - Lets create some digital freedom"; const pageDescription = "SiliconPin - easy to deploy apps and tools, freedom oriented apps and tools, high-performance, hosting solutions for PHP, Node.js, Python, Kubernetes (K8s), and K3s, and technical support."; @@ -11,6 +39,8 @@ const pageImage = "/assets/logo.svg"; title={pageTitle} description={pageDescription} ogImage={pageImage} + newSchema1={JSON.stringify(schema1)} + >
diff --git a/src/pages/services/index.astro b/src/pages/services/index.astro index 84f5a81..ed56513 100644 --- a/src/pages/services/index.astro +++ b/src/pages/services/index.astro @@ -1,120 +1,229 @@ --- +// Astro script block import Layout from '../../layouts/Layout.astro'; -import {ServiceCard} from '../../components/ServiceCard'; - -// Page-specific SEO metadata -const pageTitle = "Hosting Services | SiliconPin"; -const pageDescription = "Explore SiliconPin's reliable hosting services for PHP, Node.js, Python, Kubernetes (K8s), and K3s. Scalable solutions for businesses of all sizes with 24/7 support."; -const pageImage = "https://images.unsplash.com/photo-1551731409-43eb3e517a1a?q=80&w=2000&auto=format&fit=crop"; - -// Service +import { ServiceCard } from '../../components/ServiceCard'; const services = [ { - title: 'VPN (WireGuard)', - description: 'WireGuard is much better than other solutions like open VPN Free VPN. as WireGuard is the best we provide WireGuard VPN', imageUrl: '/assets/images/services/wiregurd-thumb.jpg', - features: ["600 GB bandwidth", "WireGuard® protocol", "Global server locations", "No activity logs"], learnMoreUrl: '/services/vpn', buyButtonText: 'Buy VPN', buyButtonUrl: '/services/buy-vpn' },{ - title: 'Deploy an App', - description: 'WordPress, Joomla, Drupal, PrestaShop, Wiki, Moodle, Directus, PocketBase, StarAPI and more.', imageUrl: '/assets/images/services/deployapp-thumb.jpg', - features: [ 'WordPress', 'Joomla', 'Drupal', 'PrestaShop', 'Wiki', 'Moodle', 'Directus', 'PocketBase', 'StarAPI' ], learnMoreUrl: '/services/deploy-an-app', buyButtonText: '', buyButtonUrl: '' }, { - title: 'Deploy From Source Code', - description: 'Node.js, Python, Ruby, Go, Rust, and more. Deploy your custom applications with ease.', imageUrl: 'https://images.unsplash.com/photo-1599507593499-a3f7d7d97667?q=80&w=2000&auto=format&fit=crop', - features: ['Node.js', 'Python', 'Ruby', 'Go', 'Rust', 'Docker', 'Kubernetes', 'JAMstack', 'Serverless'], learnMoreUrl: '/services/deploy-from-source-code', buyButtonText: '', buyButtonUrl: '' }, { - title: 'Static Site Hosting', - description: 'Secure and scalable hosting for static websites and JAMstack applications.', imageUrl: 'https://images.unsplash.com/photo-1526379879527-8559ecfcaec0?q=80&w=2000&auto=format&fit=crop', - features: ['JAMstack', 'Gatsby', 'Hugo', 'Next.js', 'Nuxt.js', 'VuePress', 'Eleventy', 'SvelteKit', 'Astro'], learnMoreUrl: '/services/static-site-hosting', buyButtonText: '', buyButtonUrl: '' }, { - title: "Python Hosting", - description: "High-performance hosting for Python applications with support for all major frameworks.", imageUrl: "https://images.unsplash.com/photo-1526379095098-d400fd0bf935?q=80&w=2000&auto=format&fit=crop", - features: ["Django", "Flask", "FastAPI", "Pyramid", "Bottle", "WSGI Support", "ASGI Support", "Celery", "Redis"], learnMoreUrl: "/services/python-hosting", buyButtonText: "", buyButtonUrl: "" }, { - title: "Node.js Hosting", - description: "Optimized cloud hosting for Node.js applications with automatic scaling.", imageUrl: "/assets/images/services/node-js.jpg", - features: ["Express", "NestJS", "Koa", "Socket.io", "PM2", "WebSockets", "Serverless", "TypeScript", "GraphQL"], learnMoreUrl: "/services/nodejs-hosting", buyButtonText: "", buyButtonUrl: "" }, { - title: 'STT Streaming (API Services)', - description: 'Real-time Speech-to-Text (STT) streaming that converts spoken words into accurate, readable text. Ideal for live events, webinars, customer support, and accessibility solutions.', imageUrl: '/assets/images/services/stt-streaming.png', - features: ['Setup Charge 5000', '10000 Min INR 2000 in Loose Plan', '10000 Min INR 1000 in Bulk Plan', 'Real-time transcription with high accuracy', 'Supports multiple languages', 'Custom vocabulary for domain-specific terms', 'Integrates easily with video/audio streams', 'Secure and scalable API access', 'Live subtitle overlay options'], learnMoreUrl: '', buyButtonText: 'Purchase', buyButtonUrl: '/services/stt-streaming' }, { - title: 'Kubernetes (K8s)', - description: 'Enterprise-grade Kubernetes clusters for container orchestration at scale.', imageUrl: '/assets/images/services/kubernetes-edge.png', - features: [ 'Fully managed K8s clusters', 'Auto-scaling and load balancing', 'Advanced networking options', 'Persistent storage solutions', 'Enterprise support available'], learnMoreUrl: '/services/kubernetes', buyButtonText: '', buyButtonUrl: '' }, { - title: 'K3s Lightweight Kubernetes', - description: 'Lightweight Kubernetes for edge, IoT, and resource-constrained environments.', imageUrl: 'https://images.unsplash.com/photo-1558494949-ef010cbdcc31?q=80&w=2000&auto=format&fit=crop', - features: [ 'Minimal resource requirements', 'Single binary < 100MB', 'Edge computing optimized', 'ARM support (Raspberry Pi compatible)', 'Simplified management'], learnMoreUrl: '/services/k3s', buyButtonText: '', buyButtonUrl: '' }, { - title: 'Hire a Human Developer', - description: 'Need a custom solution? Our experts can design a tailored App or WebApp for your specific needs.', imageUrl: 'https://images.unsplash.com/photo-1558494949-ef010cbdcc31?q=80&w=2000&auto=format&fit=crop', - features: ['Node.js', 'Python', 'Ruby', 'Go', 'Rust', 'Docker', 'Kubernetes', 'JAMstack', 'Serverless'], learnMoreUrl: '/services/hire-a-human-developer', buyButtonText: '', buyButtonUrl: '' }, { - title: 'Hire an AI Agent', - description: 'Need a custom solution? Our experts can design a tailored AI Agent for your specific needs.', imageUrl: 'https://images.unsplash.com/photo-1558494949-ef010cbdcc31?q=80&w=2000&auto=format&fit=crop', - features: ['Reactive Agents (Stateless, Rule-Based)', 'Proactive Agents (Stateful, Machine Learning)', 'Hybrid Agents (Reactive + Proactive)', 'Model-Based Agents (Stateful, Uses Memory)', 'Goal-Based Agents (Optimizes for an Objective)', 'Utility-Based Agents', 'Self Learning Agents', 'Autonomous AI Agents'], learnMoreUrl: '/services/hire-an-ai-agent', buyButtonText: '', buyButtonUrl: '' } ]; +const SERVICE_API_URL = 'https://host-api.cs1.hz.siliconpin.com/v1/services/?query=all-services-list'; +let data = []; +try { + const response = await fetch(SERVICE_API_URL); + const json = await response.json(); + if (json.success) { + // data = [...json.data, ...services]; + data = json.data; + } else { + console.error("API error:", json.message); + } +} catch (err) { + console.error("Fetch failed:", err); +} + +const servicesData = services.map((item, index) => { + return { ...item, ...data[index] }; +}); + +// SEO +let schema1 = { + "@context": "https://schema.org", + "@type": "Service", + "name": "SiliconPin Hosting & Development Services", + "description": "Reliable, scalable, and secure hosting solutions for all your applications, plus custom developer and AI agent hiring.", + "provider": { + "@type": "Organization", + "name": "SiliconPin", + "url": "https://siliconpin.com", + "telephone": "+91-700-160-1485", + "address": { + "@type": "PostalAddress", + "streetAddress": "121 Lalbari, GourBongo Road", + "addressLocality": "Habra", + "addressRegion": "West Bengal", + "postalCode": "743271", + "addressCountry": "IN" + } + }, + "areaServed": "Worldwide", + "hasOfferCatalog": { + "@type": "OfferCatalog", + "name": "SiliconPin Services", + "itemListElement": [ + { + "@type": "Offer", + "itemOffered": { + "@type": "Service", + "name": "VPN (WireGuard)", + "description": "WireGuard VPN with 600 GB bandwidth, no logs, global servers." + } + }, + { + "@type": "Offer", + "itemOffered": { + "@type": "Service", + "name": "App Deployment", + "description": "Deploy WordPress, Joomla, Drupal, Moodle, Directus, PocketBase, StarAPI and more." + } + }, + { + "@type": "Offer", + "itemOffered": { + "@type": "Service", + "name": "Deploy From Source Code", + "description": "Deploy custom Node.js, Python, Ruby, Go, Rust, Docker, Kubernetes, JAMstack & serverless apps." + } + }, + { + "@type": "Offer", + "itemOffered": { + "@type": "Service", + "name": "Static Site Hosting", + "description": "Hosting for JAMstack static sites via Gatsby, Hugo, Next.js, Nuxt.js, VuePress, SvelteKit, Astro." + } + }, + { + "@type": "Offer", + "itemOffered": { + "@type": "Service", + "name": "Python Hosting", + "description": "High‑performance hosting for Django, Flask, FastAPI, Pyramid, Bottle with WSGI/ASGI, Celery, Redis." + } + }, + { + "@type": "Offer", + "itemOffered": { + "@type": "Service", + "name": "Node.js Hosting", + "description": "Optimized cloud hosting of Node.js apps with auto‑scaling, WebSockets, PM2, GraphQL support." + } + }, + { + "@type": "Offer", + "itemOffered": { + "@type": "Service", + "name": "STT Streaming (API)", + "description": "Real‑time speech‑to‑text streaming with multi‑language support, custom vocabulary, live subtitle overlay." + }, + "priceCurrency": "INR", + "priceSpecification": { + "@type": "UnitPriceSpecification", + "price": "2000", + "billingIncrement": 10000, + "description": "Loose plan per 10000 minutes" + } + }, + { + "@type": "Offer", + "itemOffered": { + "@type": "Service", + "name": "Kubernetes (K8s)", + "description": "Fully managed enterprise‑grade Kubernetes with auto‑scaling, load balancing, persistent storage." + } + }, + { + "@type": "Offer", + "itemOffered": { + "@type": "Service", + "name": "K3s Lightweight Kubernetes", + "description": "Lightweight K3s clusters for edge/IoT—<100 MB binary, ARM support, simplified management." + } + }, + { + "@type": "Offer", + "itemOffered": { + "@type": "Service", + "name": "Hire a Human Developer", + "description": "Custom app/webapp development using Node.js, Python, Ruby, Go, Rust, Docker, Kubernetes, JAMstack, serverless." + } + }, + { + "@type": "Offer", + "itemOffered": { + "@type": "Service", + "name": "Hire an AI Agent", + "description": "Build reactive, proactive, hybrid, self‑learning or goal‑based AI agents tailored to your needs." + } + } + ] + } +} +const pageTitle = "Hosting Services | SiliconPin"; +const pageDescription = "Explore SiliconPin's reliable hosting services for PHP, Node.js, Python, Kubernetes (K8s), and K3s. Scalable solutions for businesses of all sizes with 24/7 support."; +const pageImage = "https://images.unsplash.com/photo-1551731409-43eb3e517a1a?q=80&w=2000&auto=format&fit=crop"; + --- +
@@ -127,17 +236,17 @@ const services = [

Our hosting services

- {services.map((service, index) => ( - + {servicesData.map((service : any, index: number) => ( + ))}
diff --git a/src/pages/services/kubernetis.astro b/src/pages/services/kubernetis.astro new file mode 100644 index 0000000..eb6009a --- /dev/null +++ b/src/pages/services/kubernetis.astro @@ -0,0 +1,7 @@ +--- +import Layout from "../../layouts/Layout.astro"; +import NewKubernetisUtho from "../../components/BuyServices/NewKubernetisUtho"; +--- + + + \ No newline at end of file diff --git a/src/pages/topic/index.astro b/src/pages/topic/index.astro index a6e78fc..45f885e 100644 --- a/src/pages/topic/index.astro +++ b/src/pages/topic/index.astro @@ -19,7 +19,7 @@ try { // console.log('Topic Data', data) topics = data.data || []; } catch (error) { - console.error('An error occurred', error); + console.error('An error occurred', error); } --- diff --git a/src/pages/web-tools/image-resize.astro b/src/pages/web-tools/image-resize.astro new file mode 100644 index 0000000..35018a0 --- /dev/null +++ b/src/pages/web-tools/image-resize.astro @@ -0,0 +1,40 @@ +--- +import Layout from "../../layouts/Layout.astro"; +import ImageResizes from "../../components/Tools/ImageResize" +--- + +
+ + +
+
+ + diff --git a/yarn.lock b/yarn.lock index 5a0d60c..d2978d2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3136,6 +3136,11 @@ ieee754@^1.2.1: resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== +image-resize-compress@^2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/image-resize-compress/-/image-resize-compress-2.1.1.tgz" + integrity sha512-aF4O1ZzAM0wDziIQZdqlxvDBe163J1Kiu+hSXbYNaGDcD4ggqAgRLLtRmpspnpJPHa4PkhVjwOshzBMHbOWESQ== + import-fresh@^3.3.0: version "3.3.1" resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz"