Compare commits

..

No commits in common. "main" and "develop" have entirely different histories.

7 changed files with 69 additions and 141 deletions

View file

@ -1,59 +0,0 @@
# Copilot Instructions for n-daisuke897-blog
## Project Overview
This is a personal blog named "Naputo" built with Astro and Preact. The blog is designed to publish articles and content with a modern static site generation approach.
**Repository**: https://git.n-daisuke897.com/nakada0907/n-daisuke897-blog
## Tech Stack
- **Framework**: Astro 5.x
- **UI Library**: Preact 10.x for interactive components
- **Language**: TypeScript
- **Build Tool**: Astro CLI
- **RSS**: @astrojs/rss for RSS feed generation
- **Linting**: ESLint with TypeScript and Astro plugins
## Project Structure
- `src/`: Source code
- `pages/`: Astro pages (routing based on file structure)
- `layouts/`: Layout components
- `components/`: Reusable components
- `blog/`: Blog content
- `styles/`: Global styles
- `scripts/`: Utility scripts
- `content.config.ts`: Content collection configuration
- `public/`: Static assets (images, fonts, etc.)
- `dist/`: Build output directory
- `buildspec.yml`: AWS CodeBuild configuration
## Development Guidelines
### Commands
- `npm install`: Install dependencies
- `npm run dev`: Start local development server at `localhost:4321`
- `npm run build`: Build production site to `./dist/`
- `npm run preview`: Preview production build locally
- `npm run astro`: Run Astro CLI commands
### Coding Standards
- Use TypeScript for all new code
- Follow the ESLint configuration provided
- Use Preact components for interactive UI elements
- Keep components modular and reusable
- Use Astro's component syntax for static content
### File Naming
- Use kebab-case for file names
- Use PascalCase for component names
- Use `.astro` extension for Astro components
- Use `.tsx` extension for Preact components
### Best Practices
- Prefer static generation over client-side rendering when possible
- Use Astro's content collections for blog posts
- Optimize images and assets before adding to `public/`
- Keep bundle size minimal - Astro ships zero JS by default
- Use Preact only when client interactivity is needed
## Deployment
This project uses AWS CodeBuild for deployment (see `buildspec.yml`).

61
amplify-stack.yaml Normal file
View file

@ -0,0 +1,61 @@
AWSTemplateFormatVersion: '2010-09-09'
Description: 'CloudFormation template for deploying Astro site to AWS Amplify'
Parameters:
GitHubAccessToken:
Type: String
NoEcho: true
Description: GitHub Access token for repository access
Resources:
AmplifyApp:
Type: AWS::Amplify::App
UpdateReplacePolicy: Delete
DeletionPolicy: Delete
Properties:
Name: blog_daisuke_nakahara
Repository: https://github.com/Daisuke897/blog_daisuke_nakahara
AccessToken: !Ref GitHubAccessToken
Platform: WEB
BuildSpec: |
version: 1
frontend:
phases:
preBuild:
commands:
- npm ci --cache .npm --prefer-offline
build:
commands:
- npm run build
artifacts:
baseDirectory: dist
files:
- '**/*'
cache:
paths:
- .npm/**/*
CustomRules:
- Source: '</^[^.]+$|\.(?!(css|gif|ico|jpg|js|png|txt|svg|woff|woff2|ttf|map|json)$)([^.]+$)/'
Target: '/index.html'
Status: '404-200'
EnableBranchAutoDeletion: false
CustomHeaders: ''
AmplifyBranch:
Type: AWS::Amplify::Branch
UpdateReplacePolicy: Delete
DeletionPolicy: Delete
Properties:
AppId: !GetAtt AmplifyApp.AppId
EnableAutoBuild: true
EnablePullRequestPreview: false
EnablePerformanceMode: false
Stage: PRODUCTION
BranchName: main
Framework: Astro
Outputs:
AppId:
Description: 'Amplify App ID'
Value: !GetAtt AmplifyApp.AppId

View file

@ -1,64 +0,0 @@
---
title: 'Fixing GitHub Copilot CLI System Vault Error with systemd'
pubDate: 2026-01-02
author: 'Nakahara Daisuke'
tags: ["GitHub", "AI"]
---
When installing GitHub Copilot CLI, you may encounter the error message: `The system vault (keychain, keyring, password manager, etc.) is not available. You may need to install one.` The solution was documented in [this issue](https://github.com/github/copilot-cli/issues/49).
This article explains how to resolve this issue using `systemd`.
### Install via Apt
```bash
$ sudo apt update
```
```bash
$ sudo apt install -y \
gnome-keyring \
libsecret-1-0 \
libsecret-tools \
seahorse
```
### Verify systemd is running
```bash
$ systemctl is-system-running
```
### Check if the user service is enabled
```bash
$ systemctl --user status gnome-keyring-daemon
○ gnome-keyring-daemon.service - GNOME Keyring daemon
Loaded: loaded (/usr/lib/systemd/user/gnome-keyring-daemon.service; enabled; preset: enabled)
Active: inactive (dead)
TriggeredBy: ○ gnome-keyring-daemon.socket
```
```bash
$ systemctl --user enable gnome-keyring-daemon
```
```bash
$ systemctl --user start gnome-keyring-daemon
```
```bash
$ systemctl --user status gnome-keyring-daemon
● gnome-keyring-daemon.service - GNOME Keyring daemon
Loaded: loaded (/usr/lib/systemd/user/gnome-keyring-daemon.service; enabled; preset: enabled)
Active: active (running) since Fri 2026-01-02 08:36:46 JST; 3s ago
Invocation: d830e5563e974edc9265650d11dfa086
TriggeredBy: ● gnome-keyring-daemon.socket
Main PID: 5222 (gnome-keyring-d)
Tasks: 5 (limit: 9422)
Memory: 3.4M (peak: 3.9M)
CPU: 37ms
CGroup: /user.slice/user-1000.slice/user@1000.service/app.slice/gnome-keyring-daemon.service
└─5222 /usr/bin/gnome-keyring-daemon --foreground --components=pkcs11,secrets --control-directory=/run/user/1000/keyring
Jan 02 08:36:46 hostname systemd[649]: Started gnome-keyring-daemon.service - GNOME Keyring daemon.
Jan 02 08:36:46 hostname gnome-keyring-daemon[5222]: GNOME_KEYRING_CONTROL=/run/user/1000/keyring
Jan 02 08:36:46 hostname gnome-keyring-daemon[5222]: another secret service is running
Jan 02 08:36:46 hostname gnome-keyring-d[5222]: another secret service is running
```
> **Note**: This article was translated from Japanese to English and reviewed with the assistance of AI (GitHub Copilot).

View file

@ -16,5 +16,5 @@
</style>
<footer>
<p class="legal-information">&copy; 2026 Nakahara Daisuke — Built with <a href="https://astro.build" target="_blank" rel="noopener">Astro</a></p>
<p class="legal-information">&copy; 2025 Nakahara Daisuke</p>
</footer>

View file

@ -7,7 +7,7 @@
<a href="/about/">About</a>
<a href="/blog/">Articles</a>
<a href="/tags/">Tags</a>
<a href="https://git.n-daisuke897.com/nakada0907/" target="_blank">
<a href="https://git.n-daisuke897.com/" target="_blank">
<img src="/icon/simple-icons--forgejo.svg" alt="Forgejo Icon">
</a>
</div>

View file

@ -49,27 +49,18 @@ const optionsForDate = {
.markdown-content {
font-family: sans-serif;
font-size: 1.1rem;
line-height: 1.8;
font-size: 1.2rem;
line-height: 2.5;
}
.markdown-content h1 {
font-size: 1.6rem;
margin-top: 2rem;
margin-bottom: 1rem;
line-height: 1.3;
font-size: 1.9rem;
}
.markdown-content h2 {
font-size: 1.4rem;
margin-top: 1.8rem;
margin-bottom: 0.8rem;
line-height: 1.3;
font-size: 1.75rem;
}
.markdown-content h3 {
font-size: 1.2rem;
margin-top: 1.5rem;
margin-bottom: 0.6rem;
line-height: 1.3;
font-size: 1.5rem;
}
</style>

View file

@ -4,7 +4,6 @@ import BlogPost from "../components/BlogPost.astro";
import { getCollection } from "astro:content";
const pageTitle = "Naputo";
const allPosts = await getCollection("blog");
const sortedPosts = allPosts.sort((a, b) => b.data.pubDate.valueOf() - a.data.pubDate.valueOf());
---
<style>
@ -42,7 +41,7 @@ const sortedPosts = allPosts.sort((a, b) => b.data.pubDate.valueOf() - a.data.pu
<h3 class="header-new-posts">New Posts</h3>
<div class="new-articles">
{
sortedPosts.slice(0, 5).map((post: any) => (
allPosts.slice(0, 6).map((post: any) => (
<BlogPost
url={`/posts/${post.id}/`}
title={post.data.title}