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:$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",
|
||||
percent: 60,
|
||||
},
|
||||
{
|
||||
title: "Moralis",
|
||||
percent: 90,
|
||||
},
|
||||
{
|
||||
title: "actix",
|
||||
percent: 80,
|
||||
|
@ -269,7 +273,7 @@ const Resume: NextPage = () => {
|
|||
},
|
||||
{
|
||||
title: "!mixsome",
|
||||
tags: ["reactjs", "web3"],
|
||||
tags: ["reactjs", "web3", "moralis"],
|
||||
description: "Approval manager dashboard and revoking approvals ",
|
||||
year: 2022,
|
||||
url: "https://dapp.mixsomecash.com",
|
||||
|
@ -292,12 +296,28 @@ const Resume: NextPage = () => {
|
|||
isLunched: true
|
||||
},
|
||||
{
|
||||
title: "iGarson",
|
||||
title: "iGarson.app",
|
||||
tags: ["springboot", "stomp", "reactjs", "nextjs", "mongodb", "pg", ".net", "pwa", "rabbitmq", "docker swarm", "elastic", "redis"],
|
||||
description: "iGarson is a first smart resturant assistance infestracture",
|
||||
year: 2022,
|
||||
url: "https://igarson.app",
|
||||
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)
|
||||
|
|
|
@ -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 |