Skip to content

Commit 80ceeb9

Browse files
PatrickHeneiseframpclaude
authored
feat: website 2025 (#383)
* feat: new website skeleton * feat: add image compression workflow * feat: add graphql queries for github * fix: use cf worker adapter * fix: wrangler config * fix: wrangler config * fix: node version * fix: vite config for cf * fix: wrangler flags * fix: remove esm build * fix: query & cf config * feat: homepage improvements * feat: add events and event detail pages * fix: featured image * feat: stats * feat: add discord link * chore: add cta notes * fix: enable PAT auth * chore: production env description * feat: group page * feat: add team page, unify layouts * feat: upcoming and past events * fix: another vite deploy try * wip: speaker profiles * fix: speaker mini profile * fix: speaker profile * chore: try build * chore: try workers adapter * fix: wrangler * fix: wrangler * chore: deploy * chore: deploy * wip: upgrade solid start * wip: upgrade solid start * fix: delete output * fix: wrangler * fix: lockfile * fix: typo * fix: try latest versions * fix: switch back to npm * fix: try cf pages module * fix: remove body logic for now * refactor: graphql * chore: pkg updates * chore: pkg update for solid * fix: solid 0.6 trial * fix: pages * fix: pages * fix: cf module * feat: toggle menu with buttons on mobile * fix: run prettier / eslint on build * feat: migrate about page * feat: announcements * feat: add events and event detail * fix: remove component * fix: revert vinxi * chore: pkg upgrade * fix: deploy trial * fix: pkg update * chore: solid start * chore: solid update * chore: refactor to astro, drop typescript, update deps - Migrate from SolidStart to Astro + Solid.js - Update wrangler config to JSON format with process.env support - Upgrade gitevents-fetch from 0.0.3 to 1.4.0 - Remove TypeScript configuration and dependencies - Migrate ESLint to v9 flat config format - Fix duplicate API calls in stats calculation - Remove old SolidStart server components - Clean up package.json dependencies 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> * chore: remove old wrangler.toml file 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> * fix: add wrangler.json with nodejs_compat flags 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> * fix: ensure empty arrays on error in data fetching 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> * fix: migrate to Tailwind CSS v4 configuration Updated from Tailwind v3 to v4 configuration: - Changed src/app.css to use new @import "tailwindcss" syntax - Removed old tailwind.config.cjs (v3 format) - Tailwind v4 auto-scans all files in src/ directory This fixes the missing CSS/layout issue on the deployed site. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> * fix: index --------- Co-authored-by: Federico Rampazzo <frampone@gmail.com> Co-authored-by: Claude <noreply@anthropic.com>
1 parent 9edc014 commit 80ceeb9

File tree

192 files changed

+18047
-101907
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

192 files changed

+18047
-101907
lines changed

.astro/content-assets.mjs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export default new Map();

.astro/content-modules.mjs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export default new Map();

.astro/content.d.ts

Lines changed: 199 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,199 @@
1+
declare module 'astro:content' {
2+
export interface RenderResult {
3+
Content: import('astro/runtime/server/index.js').AstroComponentFactory;
4+
headings: import('astro').MarkdownHeading[];
5+
remarkPluginFrontmatter: Record<string, any>;
6+
}
7+
interface Render {
8+
'.md': Promise<RenderResult>;
9+
}
10+
11+
export interface RenderedContent {
12+
html: string;
13+
metadata?: {
14+
imagePaths: Array<string>;
15+
[key: string]: unknown;
16+
};
17+
}
18+
}
19+
20+
declare module 'astro:content' {
21+
type Flatten<T> = T extends { [K: string]: infer U } ? U : never;
22+
23+
export type CollectionKey = keyof AnyEntryMap;
24+
export type CollectionEntry<C extends CollectionKey> = Flatten<AnyEntryMap[C]>;
25+
26+
export type ContentCollectionKey = keyof ContentEntryMap;
27+
export type DataCollectionKey = keyof DataEntryMap;
28+
29+
type AllValuesOf<T> = T extends any ? T[keyof T] : never;
30+
type ValidContentEntrySlug<C extends keyof ContentEntryMap> = AllValuesOf<
31+
ContentEntryMap[C]
32+
>['slug'];
33+
34+
export type ReferenceDataEntry<
35+
C extends CollectionKey,
36+
E extends keyof DataEntryMap[C] = string,
37+
> = {
38+
collection: C;
39+
id: E;
40+
};
41+
export type ReferenceContentEntry<
42+
C extends keyof ContentEntryMap,
43+
E extends ValidContentEntrySlug<C> | (string & {}) = string,
44+
> = {
45+
collection: C;
46+
slug: E;
47+
};
48+
export type ReferenceLiveEntry<C extends keyof LiveContentConfig['collections']> = {
49+
collection: C;
50+
id: string;
51+
};
52+
53+
/** @deprecated Use `getEntry` instead. */
54+
export function getEntryBySlug<
55+
C extends keyof ContentEntryMap,
56+
E extends ValidContentEntrySlug<C> | (string & {}),
57+
>(
58+
collection: C,
59+
// Note that this has to accept a regular string too, for SSR
60+
entrySlug: E,
61+
): E extends ValidContentEntrySlug<C>
62+
? Promise<CollectionEntry<C>>
63+
: Promise<CollectionEntry<C> | undefined>;
64+
65+
/** @deprecated Use `getEntry` instead. */
66+
export function getDataEntryById<C extends keyof DataEntryMap, E extends keyof DataEntryMap[C]>(
67+
collection: C,
68+
entryId: E,
69+
): Promise<CollectionEntry<C>>;
70+
71+
export function getCollection<C extends keyof AnyEntryMap, E extends CollectionEntry<C>>(
72+
collection: C,
73+
filter?: (entry: CollectionEntry<C>) => entry is E,
74+
): Promise<E[]>;
75+
export function getCollection<C extends keyof AnyEntryMap>(
76+
collection: C,
77+
filter?: (entry: CollectionEntry<C>) => unknown,
78+
): Promise<CollectionEntry<C>[]>;
79+
80+
export function getLiveCollection<C extends keyof LiveContentConfig['collections']>(
81+
collection: C,
82+
filter?: LiveLoaderCollectionFilterType<C>,
83+
): Promise<
84+
import('astro').LiveDataCollectionResult<LiveLoaderDataType<C>, LiveLoaderErrorType<C>>
85+
>;
86+
87+
export function getEntry<
88+
C extends keyof ContentEntryMap,
89+
E extends ValidContentEntrySlug<C> | (string & {}),
90+
>(
91+
entry: ReferenceContentEntry<C, E>,
92+
): E extends ValidContentEntrySlug<C>
93+
? Promise<CollectionEntry<C>>
94+
: Promise<CollectionEntry<C> | undefined>;
95+
export function getEntry<
96+
C extends keyof DataEntryMap,
97+
E extends keyof DataEntryMap[C] | (string & {}),
98+
>(
99+
entry: ReferenceDataEntry<C, E>,
100+
): E extends keyof DataEntryMap[C]
101+
? Promise<DataEntryMap[C][E]>
102+
: Promise<CollectionEntry<C> | undefined>;
103+
export function getEntry<
104+
C extends keyof ContentEntryMap,
105+
E extends ValidContentEntrySlug<C> | (string & {}),
106+
>(
107+
collection: C,
108+
slug: E,
109+
): E extends ValidContentEntrySlug<C>
110+
? Promise<CollectionEntry<C>>
111+
: Promise<CollectionEntry<C> | undefined>;
112+
export function getEntry<
113+
C extends keyof DataEntryMap,
114+
E extends keyof DataEntryMap[C] | (string & {}),
115+
>(
116+
collection: C,
117+
id: E,
118+
): E extends keyof DataEntryMap[C]
119+
? string extends keyof DataEntryMap[C]
120+
? Promise<DataEntryMap[C][E]> | undefined
121+
: Promise<DataEntryMap[C][E]>
122+
: Promise<CollectionEntry<C> | undefined>;
123+
export function getLiveEntry<C extends keyof LiveContentConfig['collections']>(
124+
collection: C,
125+
filter: string | LiveLoaderEntryFilterType<C>,
126+
): Promise<import('astro').LiveDataEntryResult<LiveLoaderDataType<C>, LiveLoaderErrorType<C>>>;
127+
128+
/** Resolve an array of entry references from the same collection */
129+
export function getEntries<C extends keyof ContentEntryMap>(
130+
entries: ReferenceContentEntry<C, ValidContentEntrySlug<C>>[],
131+
): Promise<CollectionEntry<C>[]>;
132+
export function getEntries<C extends keyof DataEntryMap>(
133+
entries: ReferenceDataEntry<C, keyof DataEntryMap[C]>[],
134+
): Promise<CollectionEntry<C>[]>;
135+
136+
export function render<C extends keyof AnyEntryMap>(
137+
entry: AnyEntryMap[C][string],
138+
): Promise<RenderResult>;
139+
140+
export function reference<C extends keyof AnyEntryMap>(
141+
collection: C,
142+
): import('astro/zod').ZodEffects<
143+
import('astro/zod').ZodString,
144+
C extends keyof ContentEntryMap
145+
? ReferenceContentEntry<C, ValidContentEntrySlug<C>>
146+
: ReferenceDataEntry<C, keyof DataEntryMap[C]>
147+
>;
148+
// Allow generic `string` to avoid excessive type errors in the config
149+
// if `dev` is not running to update as you edit.
150+
// Invalid collection names will be caught at build time.
151+
export function reference<C extends string>(
152+
collection: C,
153+
): import('astro/zod').ZodEffects<import('astro/zod').ZodString, never>;
154+
155+
type ReturnTypeOrOriginal<T> = T extends (...args: any[]) => infer R ? R : T;
156+
type InferEntrySchema<C extends keyof AnyEntryMap> = import('astro/zod').infer<
157+
ReturnTypeOrOriginal<Required<ContentConfig['collections'][C]>['schema']>
158+
>;
159+
160+
type ContentEntryMap = {
161+
162+
};
163+
164+
type DataEntryMap = {
165+
166+
};
167+
168+
type AnyEntryMap = ContentEntryMap & DataEntryMap;
169+
170+
type ExtractLoaderTypes<T> = T extends import('astro/loaders').LiveLoader<
171+
infer TData,
172+
infer TEntryFilter,
173+
infer TCollectionFilter,
174+
infer TError
175+
>
176+
? { data: TData; entryFilter: TEntryFilter; collectionFilter: TCollectionFilter; error: TError }
177+
: { data: never; entryFilter: never; collectionFilter: never; error: never };
178+
type ExtractDataType<T> = ExtractLoaderTypes<T>['data'];
179+
type ExtractEntryFilterType<T> = ExtractLoaderTypes<T>['entryFilter'];
180+
type ExtractCollectionFilterType<T> = ExtractLoaderTypes<T>['collectionFilter'];
181+
type ExtractErrorType<T> = ExtractLoaderTypes<T>['error'];
182+
183+
type LiveLoaderDataType<C extends keyof LiveContentConfig['collections']> =
184+
LiveContentConfig['collections'][C]['schema'] extends undefined
185+
? ExtractDataType<LiveContentConfig['collections'][C]['loader']>
186+
: import('astro/zod').infer<
187+
Exclude<LiveContentConfig['collections'][C]['schema'], undefined>
188+
>;
189+
type LiveLoaderEntryFilterType<C extends keyof LiveContentConfig['collections']> =
190+
ExtractEntryFilterType<LiveContentConfig['collections'][C]['loader']>;
191+
type LiveLoaderCollectionFilterType<C extends keyof LiveContentConfig['collections']> =
192+
ExtractCollectionFilterType<LiveContentConfig['collections'][C]['loader']>;
193+
type LiveLoaderErrorType<C extends keyof LiveContentConfig['collections']> = ExtractErrorType<
194+
LiveContentConfig['collections'][C]['loader']
195+
>;
196+
197+
export type ContentConfig = typeof import("../src/content.config.mjs");
198+
export type LiveContentConfig = never;
199+
}

.astro/data-store.json

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
[
2+
["Map", 1, 2],
3+
"meta::meta",
4+
["Map", 3, 4, 5, 6],
5+
"astro-version",
6+
"5.15.2",
7+
"astro-config-digest",
8+
"{\"root\":{},\"srcDir\":{},\"publicDir\":{},\"outDir\":{},\"cacheDir\":{},\"compressHTML\":true,\"base\":\"/\",\"trailingSlash\":\"ignore\",\"output\":\"static\",\"scopedStyleStrategy\":\"attribute\",\"build\":{\"format\":\"directory\",\"client\":{},\"server\":{},\"assets\":\"_astro\",\"serverEntry\":\"entry.mjs\",\"redirects\":true,\"inlineStylesheets\":\"auto\",\"concurrency\":1},\"server\":{\"open\":false,\"host\":false,\"port\":4321,\"streaming\":true,\"allowedHosts\":[]},\"redirects\":{},\"image\":{\"endpoint\":{\"route\":\"/_image\"},\"service\":{\"entrypoint\":\"astro/assets/services/sharp\",\"config\":{}},\"domains\":[],\"remotePatterns\":[],\"responsiveStyles\":false},\"devToolbar\":{\"enabled\":true},\"markdown\":{\"syntaxHighlight\":{\"type\":\"shiki\",\"excludeLangs\":[\"math\"]},\"shikiConfig\":{\"langs\":[],\"langAlias\":{},\"theme\":\"github-dark\",\"themes\":{},\"wrap\":false,\"transformers\":[]},\"remarkPlugins\":[],\"rehypePlugins\":[],\"remarkRehype\":{},\"gfm\":true,\"smartypants\":true},\"security\":{\"checkOrigin\":true,\"allowedDomains\":[]},\"env\":{\"schema\":{},\"validateSecrets\":false},\"experimental\":{\"clientPrerender\":false,\"contentIntellisense\":false,\"headingIdCompat\":false,\"preserveScriptOrder\":false,\"liveContentCollections\":false,\"csp\":false,\"staticImportMetaEnv\":false,\"chromeDevtoolsWorkspace\":false,\"failOnPrerenderConflict\":false},\"legacy\":{\"collections\":false}}"
9+
]

.astro/types.d.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
/// <reference types="astro/client" />
2+
/// <reference path="content.d.ts" />

.dockerignore

Lines changed: 0 additions & 1 deletion
This file was deleted.

.env.example

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
GH_ORG=cyprus-developer-community
2+
GH_GRAPHQL_URL=https://api.github.com/graphql
3+
4+
# Development Variables
5+
#
6+
# https://github.com/settings/tokens?type=beta
7+
# Create a fine-grained token with the following permissions:
8+
# Resource owner: cyprus-developer-community
9+
# Repository Access: Public Repositories (read only)
10+
# Organization permissions: Members (read only)
11+
GH_PAT=
12+
13+
14+
# Production Variables
15+
#
16+
# Go to Settings -> Developer Settings -> GitHub Apps and create a new GitHub App
17+
# https://github.com/organizations/<your-org>/settings/apps/new
18+
# Set up the permissions and install the application in your organization. The installation ID
19+
# can be found in the URL of the installation page:
20+
# ie: https://github.com/organizations/<your-org>/settings/installations/123456789
21+
# Create a private key and store it on a secure location.
22+
#
23+
# Permissions:
24+
# Repository permissions
25+
## Issues: Read & Write
26+
## Pull Requests: Read & Write
27+
# Organization permissions
28+
## Members: Read & Write
29+
30+
GH_APP_ID=
31+
GH_APP_INSTALLATION_ID=
32+
GH_PRIVATE_KEY=

.eslintrc.js

Lines changed: 0 additions & 14 deletions
This file was deleted.

.github/workflows/codequality.yml

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -7,32 +7,25 @@ on:
77
type: string
88
required: false
99
default: lts/hydrogen
10-
pnpm-version:
11-
type: string
12-
required: false
13-
default: 7.x
1410

1511
jobs:
1612
codequality:
1713
runs-on: ubuntu-latest
1814
steps:
1915
- uses: actions/checkout@v4
20-
- uses: pnpm/action-setup@v2.4.0
21-
with:
22-
version: '${{ inputs.pnpm-version }}'
2316
- uses: actions/setup-node@v4
2417
with:
2518
node-version: ${{ inputs.node-version }}
26-
cache: 'pnpm'
19+
cache: 'npm'
2720

2821
- name: Install Node Modules
29-
run: pnpm i
22+
run: npm ci
3023

3124
- name: Prettier
32-
run: pnpm prettier:check
25+
run: npm run pretty
3326

3427
- name: Lint
35-
run: pnpm lint:check
28+
run: npm run lint
3629

3730
# - name: Type check
3831
# run: pnpm typecheck
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
# https://github.com/marketplace/actions/image-actions
2+
3+
name: Compress Images
4+
on:
5+
pull_request:
6+
paths:
7+
- public/photos/**.jpg
8+
- public/photos/**.jpeg
9+
- public/photos/**.png
10+
- public/photos/**.webp
11+
jobs:
12+
build:
13+
# Only run on Pull Requests within the same repository, and not from forks.
14+
if: github.event.pull_request.head.repo.full_name == github.repository
15+
name: calibreapp/image-actions
16+
runs-on: ubuntu-latest
17+
steps:
18+
- name: Checkout Repo
19+
uses: actions/checkout@v3
20+
21+
- name: Compress Images
22+
uses: calibreapp/image-actions@main
23+
with:
24+
githubToken: ${{ secrets.GITHUB_TOKEN }}

0 commit comments

Comments
 (0)