Compare commits
19 Commits
12327c2210
..
main
| Author | SHA1 | Date | |
|---|---|---|---|
| a3dd5a1c50 | |||
| fdfa6a26be | |||
| 62617002ed | |||
| d14d7334cb | |||
| c7cfd0dda3 | |||
| 3345763cb1 | |||
| a1e902476f | |||
| d19874833e | |||
| 6cf9d04a3a | |||
| 4a02d28253 | |||
| 97084492a3 | |||
| a7ba4a88ad | |||
| e16974a59a | |||
| 69133838a3 | |||
| d60976b30d | |||
| 03367be183 | |||
| 77541595f2 | |||
| 8da5bfb9ba | |||
| 87a565c0d1 |
@@ -15,7 +15,7 @@ jobs:
|
|||||||
uses: actions/checkout@v6
|
uses: actions/checkout@v6
|
||||||
|
|
||||||
- name: Set up Docker Buildx
|
- name: Set up Docker Buildx
|
||||||
uses: docker/setup-buildx-action@v3
|
uses: docker/setup-buildx-action@v4
|
||||||
|
|
||||||
- name: Log in to Docker Hub
|
- name: Log in to Docker Hub
|
||||||
uses: docker/login-action@v3
|
uses: docker/login-action@v3
|
||||||
@@ -25,7 +25,7 @@ jobs:
|
|||||||
password: ${{ secrets.DOCKER_PASSWORD }}
|
password: ${{ secrets.DOCKER_PASSWORD }}
|
||||||
|
|
||||||
- name: Build and push Docker image for main
|
- name: Build and push Docker image for main
|
||||||
uses: docker/build-push-action@v6
|
uses: docker/build-push-action@v7
|
||||||
with:
|
with:
|
||||||
context: .
|
context: .
|
||||||
push: true
|
push: true
|
||||||
@@ -35,7 +35,7 @@ jobs:
|
|||||||
if: github.ref == 'refs/heads/main'
|
if: github.ref == 'refs/heads/main'
|
||||||
|
|
||||||
- name: Build and push Docker image for staging
|
- name: Build and push Docker image for staging
|
||||||
uses: docker/build-push-action@v6
|
uses: docker/build-push-action@v7
|
||||||
with:
|
with:
|
||||||
context: .
|
context: .
|
||||||
push: true
|
push: true
|
||||||
|
|||||||
+4
-4
@@ -1,20 +1,20 @@
|
|||||||
FROM node:20-alpine AS development-dependencies-env
|
FROM node:24-alpine AS development-dependencies-env
|
||||||
COPY . /app
|
COPY . /app
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
RUN npm ci
|
RUN npm ci
|
||||||
|
|
||||||
FROM node:20-alpine AS production-dependencies-env
|
FROM node:24-alpine AS production-dependencies-env
|
||||||
COPY ./package.json package-lock.json /app/
|
COPY ./package.json package-lock.json /app/
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
RUN npm ci --omit=dev
|
RUN npm ci --omit=dev
|
||||||
|
|
||||||
FROM node:20-alpine AS build-env
|
FROM node:24-alpine AS build-env
|
||||||
COPY . /app/
|
COPY . /app/
|
||||||
COPY --from=development-dependencies-env /app/node_modules /app/node_modules
|
COPY --from=development-dependencies-env /app/node_modules /app/node_modules
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
RUN npm run build
|
RUN npm run build
|
||||||
|
|
||||||
FROM node:20-alpine
|
FROM node:24-alpine
|
||||||
COPY ./package.json package-lock.json /app/
|
COPY ./package.json package-lock.json /app/
|
||||||
COPY --from=production-dependencies-env /app/node_modules /app/node_modules
|
COPY --from=production-dependencies-env /app/node_modules /app/node_modules
|
||||||
COPY --from=build-env /app/build /app/build
|
COPY --from=build-env /app/build /app/build
|
||||||
|
|||||||
+27
-54
@@ -140,6 +140,31 @@ export default function Index() {
|
|||||||
<div className="container mx-auto max-w-4xl">
|
<div className="container mx-auto max-w-4xl">
|
||||||
<h2 className="mb-12 text-3xl font-bold text-center text-slate-900 dark:text-slate-100">Experience</h2>
|
<h2 className="mb-12 text-3xl font-bold text-center text-slate-900 dark:text-slate-100">Experience</h2>
|
||||||
|
|
||||||
|
<div className="rounded-lg border border-slate-200 bg-white text-slate-950 shadow-sm dark:border-slate-800 dark:bg-slate-950 dark:text-slate-50 mb-6">
|
||||||
|
<div className="flex flex-col space-y-1.5 p-6">
|
||||||
|
<div className="flex items-start justify-between">
|
||||||
|
<div className="flex items-center gap-4">
|
||||||
|
<div className="p-2 bg-slate-900/10 dark:bg-slate-50/10 rounded-lg">
|
||||||
|
<Briefcase className="h-6 w-6 text-slate-900 dark:text-slate-50" />
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<h3 className="text-2xl font-semibold leading-none tracking-tight">Member of Web Development SIG</h3>
|
||||||
|
<p className="text-sm text-slate-600 dark:text-slate-400 text-base">RISTEK Fakultas Ilmu Komputer</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<span className="inline-flex items-center rounded-full border border-slate-200 px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-slate-950 focus:ring-offset-2 dark:border-slate-800 dark:focus:ring-slate-300 text-slate-600 dark:text-slate-400 bg-slate-100 dark:bg-slate-800">
|
||||||
|
Present
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div className="p-6 pt-0">
|
||||||
|
<div className="flex items-center gap-2 text-sm text-slate-600 dark:text-slate-400 mb-4">
|
||||||
|
<Calendar className="h-4 w-4" />
|
||||||
|
<span>March 2026 - Present</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div className="rounded-lg border border-slate-200 bg-white text-slate-950 shadow-sm dark:border-slate-800 dark:bg-slate-950 dark:text-slate-50 mb-6">
|
<div className="rounded-lg border border-slate-200 bg-white text-slate-950 shadow-sm dark:border-slate-800 dark:bg-slate-950 dark:text-slate-50 mb-6">
|
||||||
<div className="flex flex-col space-y-1.5 p-6">
|
<div className="flex flex-col space-y-1.5 p-6">
|
||||||
<div className="flex items-start justify-between">
|
<div className="flex items-start justify-between">
|
||||||
@@ -149,7 +174,7 @@ export default function Index() {
|
|||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<h3 className="text-2xl font-semibold leading-none tracking-tight">Back-end Developer Intern</h3>
|
<h3 className="text-2xl font-semibold leading-none tracking-tight">Back-end Developer Intern</h3>
|
||||||
<p className="text-sm text-slate-600 dark:text-slate-400 text-base">PT eBdesk Teknologi</p>
|
<p className="text-sm text-slate-600 dark:text-slate-400 text-base">PT Indonesia Indicator (a subsidiary of PT Ebdesk)</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<span className="inline-flex items-center rounded-full border border-slate-200 px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-slate-950 focus:ring-offset-2 dark:border-slate-800 dark:focus:ring-slate-300 text-slate-950 dark:text-slate-50">
|
<span className="inline-flex items-center rounded-full border border-slate-200 px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-slate-950 focus:ring-offset-2 dark:border-slate-800 dark:focus:ring-slate-300 text-slate-950 dark:text-slate-50">
|
||||||
@@ -368,59 +393,7 @@ export default function Index() {
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div>
|
|
||||||
<h3 className="mb-8 text-2xl font-bold text-center text-slate-900 dark:text-slate-100">
|
|
||||||
Work Accomplishments
|
|
||||||
</h3>
|
|
||||||
<div className="rounded-lg border border-slate-200 bg-white text-slate-950 shadow-sm dark:border-slate-800 dark:bg-slate-950 dark:text-slate-50 max-w-4xl mx-auto">
|
|
||||||
<div className="flex flex-col space-y-1.5 p-6">
|
|
||||||
<h3 className="text-2xl font-semibold leading-none tracking-tight text-2xl">
|
|
||||||
Dynamic Web Crawling System
|
|
||||||
</h3>
|
|
||||||
<p className="text-sm text-slate-600 dark:text-slate-400 text-lg">
|
|
||||||
Developed during my internship at PT Indonesia Indicator, this revolutionary crawling system is
|
|
||||||
capable of extracting data from various websites without needing to create a new crawler for each
|
|
||||||
website. This system allows for dynamic and more efficient data retrieval.
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
<div className="p-6 pt-0">
|
|
||||||
<div className="grid md:grid-cols-2 gap-6">
|
|
||||||
<div>
|
|
||||||
<h4 className="font-semibold mb-2 text-slate-900 dark:text-slate-100">Key Features:</h4>
|
|
||||||
<ul className="list-disc list-inside text-slate-600 dark:text-slate-400 space-y-1 mb-4">
|
|
||||||
<li>Dynamic configuration for different website structures</li>
|
|
||||||
<li>Scalable backend architecture using Go</li>
|
|
||||||
<li>Real-time monitoring dashboard</li>
|
|
||||||
<li>Efficient data processing and management</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<h4 className="font-semibold mb-2 text-slate-900 dark:text-slate-100">Technologies:</h4>
|
|
||||||
<div className="flex flex-wrap gap-2 mb-4">
|
|
||||||
<span className="inline-flex items-center rounded-full border border-slate-200 px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-slate-950 focus:ring-offset-2 dark:border-slate-800 dark:focus:ring-slate-300 text-slate-950 dark:text-slate-50">
|
|
||||||
Go
|
|
||||||
</span>
|
|
||||||
<span className="inline-flex items-center rounded-full border border-slate-200 px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-slate-950 focus:ring-offset-2 dark:border-slate-800 dark:focus:ring-slate-300 text-slate-950 dark:text-slate-50">
|
|
||||||
Tailwind CSS
|
|
||||||
</span>
|
|
||||||
<span className="inline-flex items-center rounded-full border border-slate-200 px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-slate-950 focus:ring-offset-2 dark:border-slate-800 dark:focus:ring-slate-300 text-slate-950 dark:text-slate-50">
|
|
||||||
HTMX
|
|
||||||
</span>
|
|
||||||
<span className="inline-flex items-center rounded-full border border-slate-200 px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-slate-950 focus:ring-offset-2 dark:border-slate-800 dark:focus:ring-slate-300 text-slate-950 dark:text-slate-50">
|
|
||||||
Templ
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div className="flex gap-4">
|
|
||||||
<span className="inline-flex items-center justify-center rounded-md text-sm font-medium ring-offset-white transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-slate-950 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 dark:ring-offset-slate-950 dark:focus-visible:ring-slate-300 bg-slate-900 text-slate-50 hover:bg-slate-900/90 dark:bg-slate-50 dark:text-slate-900 dark:hover:bg-slate-50/90 h-10 px-4 py-2 opacity-50 cursor-not-allowed">
|
|
||||||
<Briefcase className="mr-2 h-4 w-4" />
|
|
||||||
Work Accomplishment
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
|
|||||||
Generated
+327
-305
File diff suppressed because it is too large
Load Diff
+4
-4
@@ -12,7 +12,7 @@
|
|||||||
"@react-router/node": "^7.7.1",
|
"@react-router/node": "^7.7.1",
|
||||||
"@react-router/serve": "^7.7.1",
|
"@react-router/serve": "^7.7.1",
|
||||||
"isbot": "^5.1.27",
|
"isbot": "^5.1.27",
|
||||||
"lucide-react": "^0.575.0",
|
"lucide-react": "^0.577.0",
|
||||||
"react": "^19.1.0",
|
"react": "^19.1.0",
|
||||||
"react-dom": "^19.1.0",
|
"react-dom": "^19.1.0",
|
||||||
"react-router": "^7.7.1",
|
"react-router": "^7.7.1",
|
||||||
@@ -21,12 +21,12 @@
|
|||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@react-router/dev": "^7.7.1",
|
"@react-router/dev": "^7.7.1",
|
||||||
"@tailwindcss/vite": "^4.1.11",
|
"@tailwindcss/vite": "^4.1.11",
|
||||||
"@types/node": "^20",
|
"@types/node": "^24.0.0",
|
||||||
"@types/react": "^19.1.2",
|
"@types/react": "^19.1.2",
|
||||||
"@types/react-dom": "^19.1.2",
|
"@types/react-dom": "^19.1.2",
|
||||||
"tailwindcss": "^4.1.11",
|
"tailwindcss": "^4.1.11",
|
||||||
"typescript": "^5.8.3",
|
"typescript": "^5.8.3",
|
||||||
"vite": "^6.3.3",
|
"vite": "^7.0.0",
|
||||||
"vite-tsconfig-paths": "^5.1.4"
|
"vite-tsconfig-paths": "^6.0.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user