favicon
|
@ -12,3 +12,6 @@ docker build -t registry.vnfco.ir/amirmoghi3/me:latest -t registry.vnfco.ir/amir
|
||||||
docker push registry.vnfco.ir/amirmoghi3/me:latest || exit 1;
|
docker push registry.vnfco.ir/amirmoghi3/me:latest || exit 1;
|
||||||
docker push registry.vnfco.ir/amirmoghi3/me:$version || exit 1;
|
docker push registry.vnfco.ir/amirmoghi3/me:$version || exit 1;
|
||||||
|
|
||||||
|
|
||||||
|
ssh -t root@imedapp.ir 'docker service update API_webserver --image=registry.vnfco.ir/amirmoghi3/me:latest --with-registry-auth'
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,41 @@
|
||||||
|
import Document, { Html, Head, Main, NextScript } from "next/document";
|
||||||
|
// const gtag = `https://www.googletagmanager.com/gtag/js?id=${process.env.NEXT_PUBLIC_GA_ID}`;
|
||||||
|
export default class MyDocument extends Document {
|
||||||
|
render() {
|
||||||
|
const isProd = process.env.NODE_ENV === "production";
|
||||||
|
return (
|
||||||
|
<Html lang="fa">
|
||||||
|
<Head>
|
||||||
|
<link rel="apple-touch-icon" sizes="57x57" href="favicon/apple-icon-57x57.png" />
|
||||||
|
<link rel="apple-touch-icon" sizes="60x60" href="favicon/apple-icon-60x60.png" />
|
||||||
|
<link rel="apple-touch-icon" sizes="72x72" href="favicon/apple-icon-72x72.png" />
|
||||||
|
<link rel="apple-touch-icon" sizes="76x76" href="favicon/apple-icon-76x76.png" />
|
||||||
|
<link rel="apple-touch-icon" sizes="114x114" href="favicon/apple-icon-114x114.png" />
|
||||||
|
<link rel="apple-touch-icon" sizes="120x120" href="favicon/apple-icon-120x120.png" />
|
||||||
|
<link rel="apple-touch-icon" sizes="144x144" href="favicon/apple-icon-144x144.png" />
|
||||||
|
<link rel="apple-touch-icon" sizes="152x152" href="favicon/apple-icon-152x152.png" />
|
||||||
|
<link rel="apple-touch-icon" sizes="180x180" href="favicon/apple-icon-180x180.png" />
|
||||||
|
<link rel="icon" type="image/png" sizes="192x192" href="favicon/android-icon-192x192.png" />
|
||||||
|
<link rel="icon" type="image/png" sizes="32x32" href="favicon/favicon-32x32.png" />
|
||||||
|
<link rel="icon" type="image/png" sizes="96x96" href="favicon/favicon-96x96.png" />
|
||||||
|
<link rel="icon" type="image/png" sizes="16x16" href="favicon/favicon-16x16.png" />
|
||||||
|
<link rel="manifest" href="favicon/manifest.json" />
|
||||||
|
<meta name="msapplication-TileColor" content="#26232A" />
|
||||||
|
<meta name="msapplication-TileImage" content="favicon/ms-icon-144x144.png" />
|
||||||
|
<meta name="theme-color" content="#26232A" />
|
||||||
|
<link rel="icon" href="favicon/favicon.ico" />
|
||||||
|
{/* manifest */}
|
||||||
|
<link rel="manifest" href="favicon/manifest.json" />
|
||||||
|
{!isProd && (
|
||||||
|
<></>
|
||||||
|
)}
|
||||||
|
</Head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<Main />
|
||||||
|
<NextScript />
|
||||||
|
</body>
|
||||||
|
</Html>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
|
@ -188,6 +188,10 @@ const Resume: NextPage = () => {
|
||||||
title: "GraphQL",
|
title: "GraphQL",
|
||||||
percent: 60,
|
percent: 60,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
title: "Moralis",
|
||||||
|
percent: 90,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
title: "actix",
|
title: "actix",
|
||||||
percent: 80,
|
percent: 80,
|
||||||
|
@ -269,7 +273,7 @@ const Resume: NextPage = () => {
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: "!mixsome",
|
title: "!mixsome",
|
||||||
tags: ["reactjs", "web3"],
|
tags: ["reactjs", "web3", "moralis"],
|
||||||
description: "Approval manager dashboard and revoking approvals ",
|
description: "Approval manager dashboard and revoking approvals ",
|
||||||
year: 2022,
|
year: 2022,
|
||||||
url: "https://dapp.mixsomecash.com",
|
url: "https://dapp.mixsomecash.com",
|
||||||
|
@ -292,12 +296,28 @@ const Resume: NextPage = () => {
|
||||||
isLunched: true
|
isLunched: true
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: "iGarson",
|
title: "iGarson.app",
|
||||||
tags: ["springboot", "stomp", "reactjs", "nextjs", "mongodb", "pg", ".net", "pwa", "rabbitmq", "docker swarm", "elastic", "redis"],
|
tags: ["springboot", "stomp", "reactjs", "nextjs", "mongodb", "pg", ".net", "pwa", "rabbitmq", "docker swarm", "elastic", "redis"],
|
||||||
description: "iGarson is a first smart resturant assistance infestracture",
|
description: "iGarson is a first smart resturant assistance infestracture",
|
||||||
year: 2022,
|
year: 2022,
|
||||||
url: "https://igarson.app",
|
url: "https://igarson.app",
|
||||||
isLunched: true
|
isLunched: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "ftsco.co",
|
||||||
|
tags: ["nextjs", "docker", "swarm", "nginx", "let's encrypt"],
|
||||||
|
description: "introducing herbal products for export.",
|
||||||
|
year: 2022,
|
||||||
|
url: "https://ftsco.co",
|
||||||
|
isLunched: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "imedapp",
|
||||||
|
tags: ["nextjs", "pg", "swarm", "docker"],
|
||||||
|
description: "selling medical content",
|
||||||
|
year: 2022,
|
||||||
|
url: "https://imedapp.ir",
|
||||||
|
isLunched: true
|
||||||
}
|
}
|
||||||
|
|
||||||
].sort((a, b) => b.year - a.year)
|
].sort((a, b) => b.year - a.year)
|
||||||
|
|
|
@ -0,0 +1,54 @@
|
||||||
|
import React from "react";
|
||||||
|
import type { NextApiResponse } from 'next'
|
||||||
|
const Sitemap = () => {
|
||||||
|
return null;
|
||||||
|
};
|
||||||
|
|
||||||
|
type Props = {
|
||||||
|
res: NextApiResponse
|
||||||
|
}
|
||||||
|
export const getServerSideProps = async ({ res }: Props) => {
|
||||||
|
const BASE_URL =
|
||||||
|
process.env.NEXT_PUBLIC_URL || "http://localhost:3000";
|
||||||
|
|
||||||
|
const staticPaths = [
|
||||||
|
{
|
||||||
|
url: `${BASE_URL}/`,
|
||||||
|
priority: 1.0,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
url: `${BASE_URL}/resume`,
|
||||||
|
priority: 1.0,
|
||||||
|
},
|
||||||
|
|
||||||
|
].sort((a, b) => b.priority - a.priority)
|
||||||
|
|
||||||
|
|
||||||
|
const allPaths = [...staticPaths];
|
||||||
|
|
||||||
|
const sitemap = `<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
|
||||||
|
${allPaths
|
||||||
|
.map(({ url, priority }) => {
|
||||||
|
return `
|
||||||
|
<url>
|
||||||
|
<loc>${url}</loc>
|
||||||
|
<lastmod>${new Date().toISOString()}</lastmod>
|
||||||
|
<changefreq>weekly</changefreq>
|
||||||
|
<priority>${priority}</priority>
|
||||||
|
</url>
|
||||||
|
`;
|
||||||
|
})
|
||||||
|
.join("")}
|
||||||
|
</urlset>`;
|
||||||
|
|
||||||
|
res.setHeader("Content-Type", "text/xml");
|
||||||
|
res.write(sitemap);
|
||||||
|
res.end();
|
||||||
|
|
||||||
|
return {
|
||||||
|
props: {},
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
export default Sitemap;
|
Before Width: | Height: | Size: 25 KiB |
After Width: | Height: | Size: 3.7 KiB |
After Width: | Height: | Size: 3.6 KiB |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 1.9 KiB |
After Width: | Height: | Size: 2.5 KiB |
After Width: | Height: | Size: 2.9 KiB |
After Width: | Height: | Size: 3.1 KiB |
After Width: | Height: | Size: 3.7 KiB |
After Width: | Height: | Size: 3.9 KiB |
After Width: | Height: | Size: 4.8 KiB |
After Width: | Height: | Size: 1.7 KiB |
After Width: | Height: | Size: 1.7 KiB |
After Width: | Height: | Size: 1.9 KiB |
After Width: | Height: | Size: 2.1 KiB |
After Width: | Height: | Size: 4.2 KiB |
After Width: | Height: | Size: 4.2 KiB |
|
@ -0,0 +1,2 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<browserconfig><msapplication><tile><square70x70logo src="/ms-icon-70x70.png"/><square150x150logo src="/ms-icon-150x150.png"/><square310x310logo src="/ms-icon-310x310.png"/><TileColor>#ffffff</TileColor></tile></msapplication></browserconfig>
|
After Width: | Height: | Size: 823 B |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 2.5 KiB |
After Width: | Height: | Size: 1.1 KiB |
|
@ -0,0 +1,41 @@
|
||||||
|
{
|
||||||
|
"name": "App",
|
||||||
|
"icons": [
|
||||||
|
{
|
||||||
|
"src": "\/android-icon-36x36.png",
|
||||||
|
"sizes": "36x36",
|
||||||
|
"type": "image\/png",
|
||||||
|
"density": "0.75"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "\/android-icon-48x48.png",
|
||||||
|
"sizes": "48x48",
|
||||||
|
"type": "image\/png",
|
||||||
|
"density": "1.0"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "\/android-icon-72x72.png",
|
||||||
|
"sizes": "72x72",
|
||||||
|
"type": "image\/png",
|
||||||
|
"density": "1.5"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "\/android-icon-96x96.png",
|
||||||
|
"sizes": "96x96",
|
||||||
|
"type": "image\/png",
|
||||||
|
"density": "2.0"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "\/android-icon-144x144.png",
|
||||||
|
"sizes": "144x144",
|
||||||
|
"type": "image\/png",
|
||||||
|
"density": "3.0"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "\/android-icon-192x192.png",
|
||||||
|
"sizes": "192x192",
|
||||||
|
"type": "image\/png",
|
||||||
|
"density": "4.0"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
After Width: | Height: | Size: 3.7 KiB |
After Width: | Height: | Size: 3.8 KiB |
After Width: | Height: | Size: 10 KiB |
After Width: | Height: | Size: 1.9 KiB |