type Category = 'language' | 'framework' | 'infra';
export const byCategory = (skills: Skill[], key: Category) =>
skills.filter((skill) => skill.category === key);
class SkillsController < ApplicationController
def index
@skills = Skill.featured.order(:name)
end
endFROM node:22-slim AS builder
WORKDIR /app
COPY . .
RUN corepack enable && yarn install --immutable
RUN yarn build
<script setup lang="ts">
const props = defineProps<{ skills: Skill[] }>();
const featured = computed(() =>
props.skills.filter((skill) => skill.featured),
);
</script>@RestController
@RequestMapping("/api/skills")
class SkillController {
@GetMapping
List<Skill> index() {
return service.findFeatured();
}
}jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5
- run: yarn buildclass Skill
attr_reader :name, :category
def featured?
category != :legacy
end
endconst nextConfig: NextConfig = {
output: 'export',
images: { unoptimized: true },
};
export default nextConfig;[plugin.metrics.nginx]
command = "mackerel-plugin-nginx -port=8080"
[plugin.checks.https]
command = ["check-http", "-u", "https://makowis.dev"]
const SkillList: FC<Props> = ({ skills }) => (
<ul>
{skills.map((skill) => (
<li key={skill.name}>{skill.name}</li>
))}
</ul>
);public record Skill(String name, Category category) {
public boolean isFeatured() {
return category != Category.LEGACY;
}
}$ aws s3 sync ./out s3://makowis.dev --delete
$ aws cloudfront create-invalidation \
--distribution-id E1MAKOWISDEV --paths '/*'export default defineNuxtConfig({
ssr: false,
modules: ['@nuxt/image'],
app: { head: { title: 'makowis.dev' } },
});$ yarn lint && yarn test && yarn build
Compiled successfully
5 tests passed
Exported 7 static routes