diff --git a/README.md b/README.md index 037945f5..5e971dc4 100644 --- a/README.md +++ b/README.md @@ -115,9 +115,9 @@ JVM desktop runs on Windows, macOS, and Linux. The Linux and Windows columns are ## Who's using FileKit -FileKit ships in production apps on mobile, desktop, and the web, including [Ashampoo Photo Organizer](https://www.ashampoo.com/en-us/photo-organizer), [Keyguard](https://github.com/AChep/keyguard-app), [AB Download Manager](https://github.com/amir1376/ab-download-manager/), [Twine](https://github.com/msasikanth/twine), [Heron](https://github.com/tunjid/heron), and [Composables SVG to Compose](https://composables.com/svg-to-compose). +FileKit is used by [Thunderbird](https://github.com/thunderbird/thunderbird-android), [Leboncoin's Spark design system](https://github.com/leboncoin/spark-android), [Gradle Client](https://github.com/gradle/gradle-client), [Blockstream Green](https://github.com/Blockstream/green_android), [Square's Workflow trace viewer](https://github.com/square/workflow-kotlin), the [Android FHIR SDK](https://github.com/ohs-foundation/android-fhir), [Animeko](https://github.com/open-ani/animeko), and [StreetComplete](https://github.com/streetcomplete/StreetComplete). -See every project in the [showcase](https://filekit.mintlify.app/showcase), or [add your project](https://github.com/vinceglb/FileKit/discussions/343). +See how each project uses it in the [showcase](https://filekit.mintlify.app/showcase), read what developers say on the [wall of love](https://filekit.mintlify.app/wall-of-love), or [add your project](https://github.com/vinceglb/FileKit/discussions/343). ## Contributing diff --git a/docs/docs.json b/docs/docs.json index 01e26370..3bde7b35 100644 --- a/docs/docs.json +++ b/docs/docs.json @@ -70,11 +70,17 @@ "cookbook/zip-archives" ] }, + { + "group": "Community", + "pages": [ + "showcase", + "wall-of-love" + ] + }, { "group": "Resources", "pages": [ - "roadmap", - "showcase" + "roadmap" ] } ] diff --git a/docs/introduction.mdx b/docs/introduction.mdx index 68a7b8b8..dab095a9 100644 --- a/docs/introduction.mdx +++ b/docs/introduction.mdx @@ -5,6 +5,9 @@ description: Pick, save, read, and write files with one Kotlin Multiplatform API og:title: FileKit --- +import { QuoteGrid, QuoteCard } from '/snippets/quote-card.jsx' +import { UsedBy } from '/snippets/used-by.jsx' + FileKit: file operations, pickers, and dialogs for Kotlin and Compose Multiplatform -## Used in production - - - - Bluesky client for Android, iOS, and desktop - - - Multiplatform RSS reader - - - Bitwarden and KeePass client - - - Photo management for large collections - - - Desktop download manager - - - Web tool by Composables - - +## Who uses FileKit + + -[See all projects using FileKit β†’](/showcase) + + + + + + +See how each project uses FileKit in the [showcase](/showcase), and read more on the [wall of love](/wall-of-love). Browse the [sample apps](https://github.com/vinceglb/FileKit/tree/main/sample) to see FileKit running on each platform. diff --git a/docs/showcase.mdx b/docs/showcase.mdx index 057c31ef..4d417bfc 100644 --- a/docs/showcase.mdx +++ b/docs/showcase.mdx @@ -1,33 +1,108 @@ --- title: "Who's using FileKit" sidebarTitle: 'Showcase' -description: 'Apps and tools built with FileKit across Android, iOS, desktop, and the web' +description: 'Organizations, open source apps, and commercial products that use FileKit, each with a public source' +mode: 'wide' --- -FileKit ships in production apps on mobile, desktop, and the web. Here are some of the projects that rely on it. - -- **[Heron](https://github.com/tunjid/heron)**: KMP Bluesky client using FileKit for image preview when uploading images or videos -- **[Rush](https://github.com/shub39/Rush)**: Lyrics search app like Spotify -- **[Composables SVG to Compose](https://composables.com/svg-to-compose)**: Web tool to convert SVG to Compose code in seconds -- **[Twine](https://github.com/msasikanth/twine)**: A multiplatform RSS reader built using Kotlin and Compose -- **[Butler](https://github.com/HLCaptain/butler)**: AI Chat App supporting image uploads across iOS, Android, Desktop, and WasmJS -- **[PixelSafe](https://github.com/StefanOltmann/pixelsafe)**: Free steganography tool for PNG images -- **[AndroidToolKit](https://github.com/LazyIonEs/AndroidToolKit)**: Desktop tools applicable to Android development, supporting Windows, Mac and Linux -- **[Splital](https://splital.com/)**: Easily track and manage your shared expenses, quickly, simply, and hassle-free on [Android](https://play.google.com/store/apps/details?id=com.splital.project) and [iOS](https://apps.apple.com/us/app/splital-settle-up-easily/id6501984581) -- **[Tracker - Manager for Bluesky](https://play.google.com/store/apps/details?id=com.bluesky.followers.analyzer)**: Track and manage your Bluesky followers, unfollowers, blockers, and post analytics, all in real time. On [Android](https://play.google.com/store/apps/details?id=com.bluesky.followers.analyzer) and [iOS](https://apps.apple.com/us/app/tracker-manager-for-bluesky/id6740998282). -- **[Parrot Workout Tracker](https://parrotworkouttracker.com/)**: The ultimate fitness log and exercise tracker to crush your goals on [Android](https://play.google.com/store/apps/details?id=de.kreiniker.parrotworkouttracker) and [iOS](https://apps.apple.com/us/app/workout-tracker-log-parrot/id6741729053). -- **[Ashampoo Photo Organizer](https://www.ashampoo.com/en-us/photo-organizer)**: Photo management software for organizing and searching large photo collections -- **[AB Download Manager](https://github.com/amir1376/ab-download-manager/)**: A Download Manager that speeds up your downloads -- **[Edconv](https://github.com/edneyosf/Edconv)**: A user-friendly interface that simplifies the power of FFmpeg. It's designed for fast and efficient conversion of video and audio files. -- **[Gluky](https://github.com/N7ghtm4r3/Gluky)**, **[Refy](https://github.com/N7ghtm4r3/Refy)**, **[Pandoro](https://github.com/N7ghtm4r3/Pandoro)**, **[Neutron](https://github.com/N7ghtm4r3/Neutron)**, and **[Brownie](https://github.com/N7ghtm4r3/Brownie)**: Self-hosted applications using FileKit for profile pictures and file uploads -- **[Keyguard](https://github.com/AChep/keyguard-app)**: Alternative client for the Bitwarden platform and KeePass (KDBX) -- **[HowMarket](https://github.com/dududaa/howmarket)**: Cross-platform Point of Sale (PoS) software for small and growing businesses, using FileKit to upload and manage product and user images -- **[Authmeister](https://monoroh.com/authmeister)**: Multiplatform OTP authenticator supporting TOTP and HOTP, available on [Android](https://play.google.com/store/apps/details?id=com.kopylovis.authmeister) and [iOS](https://apps.apple.com/us/app/authmeister/id6742833866) -- **[Dancing Decibels](https://www.dancingdecibels.com)**: Multi-platform app for music festivals and live entertainment experiences, using FileKit for image imports and schedule import/export -- **[Kai](https://github.com/SimonSchubert/Kai)**: OpenClaw alternative in your pocket, using FileKit in production across Android, iOS, desktop, and web -- **[Hammer Editor](https://github.com/Wavesonics/hammer-editor)**: Multi-platform tool for writing stories and novels, using FileKit to select project directories and images -- **[DevAnalyzer](https://github.com/Coding-Meet/DevAnalyzer)**: Developer productivity tool for analyzing and understanding software projects, using FileKit for file and directory handling in its project analysis workflow +FileKit ships in apps on mobile, desktop, and the web. Each entry says how the project uses FileKit and links to a public source: the build file that declares the dependency or, for closed-source apps, the developer's own post. + +## Trusted by + + + + Thunderbird for Android and K-9 Mail use FileKit Core in their logging stack to write and export sync debug logs. Included from Thunderbird 26, currently in Daily builds. [Source](https://github.com/thunderbird/thunderbird-android/blob/main/app-common/build.gradle.kts) + + + Spark, Leboncoin's Android design system, builds its FileUpload components on FileKit pickers. [Source](https://github.com/leboncoin/spark-android/blob/main/spark/build.gradle.kts) + + + Gradle Client, a desktop app for the Gradle Tooling API, picks build directories with FileKit. [Source](https://github.com/gradle/gradle-client/blob/main/gradle-client/build.gradle.dcl) + + + The Green Bitcoin wallet imports and exports PSBT files and shares files with FileKit, on Android and desktop. [Source](https://github.com/Blockstream/green_android/blob/master/data/build.gradle.kts) + + + `workflow-trace-viewer`, an internal desktop tool in the Workflow repository, loads trace files with the FileKit file picker. [Source](https://github.com/square/workflow-kotlin/blob/main/workflow-trace-viewer/build.gradle.kts) + + + The project started by Google, now under the OHS Software Foundation, uses FileKit camera and file pickers for attachments in its in-progress multiplatform Structured Data Capture module. [Source](https://github.com/ohs-foundation/android-fhir/blob/master/datacapture-kmp/build.gradle.kts) + + + The official DroidKaigi 2025 conference app picks profile images with FileKit and loads them with Coil. [Source](https://github.com/DroidKaigi/conference-app-2025/blob/main/feature/profile/build.gradle.kts) + + + Open source banking apps for Apache Fineract upload ID, KYC, and loan documents with FileKit: [Mifos Mobile](https://github.com/openMF/mifos-mobile/blob/dev/feature/auth/build.gradle.kts), [Mifos Pay](https://github.com/openMF/mifos-pay/blob/dev/feature/kyc/build.gradle.kts), and [Mifos X Field Officer](https://github.com/openMF/mifos-x-field-officer-app/blob/dev/feature/client/build.gradle.kts). + + + ORT Workbench, the desktop viewer for ORT results, opens result files and directories with FileKit dialogs. [Source](https://github.com/oss-review-toolkit/ort-workbench/blob/main/build.gradle.kts) + + + The official Kotlin Multiplatform example app for the Scanbot SDK picks images and PDFs with FileKit. [Source](https://github.com/doo/scanbot-sdk-example-kmp/blob/main/composeApp/build.gradle.kts) + + + +## Open source apps + +Sorted by GitHub stars. The source link points to the build file that declares FileKit. + +| Project | Stars | How it uses FileKit | Source | +| --- | --- | --- | --- | +| [Spotube](https://github.com/team-spotube/spotube) | GitHub stars | Music streaming app. Its Kotlin Multiplatform rewrite picks the download and cache folders, playlist covers, and plugin files | [Source](https://github.com/team-spotube/spotube/blob/master/composeApp/build.gradle.kts) | +| [Animeko](https://github.com/open-ani/animeko) | GitHub stars | Anime tracking and streaming app: image attachments in comments, avatar upload, saving images, desktop cache folder | [Source](https://github.com/open-ani/animeko/blob/main/app/shared/application/build.gradle.kts) | +| [AB Download Manager](https://github.com/amir1376/ab-download-manager) | GitHub stars | Desktop download manager: download location folder picker and custom sound files | [Source](https://github.com/amir1376/ab-download-manager/blob/master/desktop/app/build.gradle.kts) | +| [StreetComplete](https://github.com/streetcomplete/StreetComplete) | GitHub stars | OpenStreetMap editor for Android and iOS: note photos, image compression, sharing log files | [Source](https://github.com/streetcomplete/StreetComplete/blob/master/app/build.gradle.kts) | +| [MuJing](https://github.com/tangshimin/MuJing) | GitHub stars | Desktop app to learn English words from movies and documents: opens subtitle, video, and vocabulary files | [Source](https://github.com/tangshimin/MuJing/blob/master/build.gradle.kts) | +| [AutoDev Xiuper](https://github.com/phodal/auto-dev) | GitHub stars | AI coding app for desktop, mobile, and web: file and directory pickers, web downloads | [Source](https://github.com/phodal/auto-dev/blob/master/mpp-ui/build.gradle.kts) | +| [Keyguard](https://github.com/AChep/keyguard-app) | GitHub stars | Bitwarden and KeePass client: open and save dialogs for vaults and attachments on desktop | [Source](https://github.com/AChep/keyguard-app/blob/master/common/build.gradle.kts) | +| [CrossPaste](https://github.com/CrossPaste/crosspaste-desktop) | GitHub stars | Cross-device clipboard sync: storage path, import, and export dialogs | [Source](https://github.com/CrossPaste/crosspaste-desktop/blob/main/app/build.gradle.kts) | +| [Twine](https://github.com/msasikanth/twine) | GitHub stars | Multiplatform RSS reader: OPML feed import and export | [Source](https://github.com/msasikanth/twine/blob/main/core/data/build.gradle.kts) | +| [Husi](https://github.com/xchacha20-poly1305/husi) | GitHub stars | Multiplatform proxy tool: backup import and export, saving QR codes | [Source](https://github.com/xchacha20-poly1305/husi/blob/dev/composeApp/build.gradle.kts) | +| [Bifrost](https://github.com/zacharee/Bifrost) | GitHub stars | Samsung firmware downloader: file and folder pickers, save dialog | [Source](https://github.com/zacharee/Bifrost/blob/master/common/build.gradle.kts) | +| [Tomato](https://github.com/nsh07/Tomato) | GitHub stars | Pomodoro timer: backup and restore files | [Source](https://github.com/nsh07/Tomato/blob/dev/shared/build.gradle.kts) | +| [qBitController](https://github.com/Bartuzen/qBitController) | GitHub stars | qBittorrent remote control: adds torrent files and exports data | [Source](https://github.com/Bartuzen/qBitController/blob/master/composeApp/build.gradle.kts) | +| [Kai](https://github.com/SimonSchubert/Kai) | GitHub stars | AI assistant on Android, iOS, desktop, and web: chat attachments, file export, sandbox file browser | [Source](https://github.com/SimonSchubert/Kai/blob/main/composeApp/build.gradle.kts) | +| [PodAura](https://github.com/SkyD666/PodAura) | GitHub stars | Podcast and RSS app: OPML import and export, media folders, sharing | [Source](https://github.com/SkyD666/PodAura/blob/master/shared/build.gradle.kts) | +| [Grit](https://github.com/shub39/Grit) | GitHub stars | Habit tracker: backup export and restore | [Source](https://github.com/shub39/Grit/blob/master/shared/logic/build.gradle.kts) | +| [Bangumi for CMP](https://github.com/xiaoyvyv/bangumi) | GitHub stars | Unofficial bangumi.tv client: image pickers and Coil loading | [Source](https://github.com/xiaoyvyv/bangumi/blob/main/buildSrc/src/main/kotlin/bgm.library.gradle.kts) | +| [Rush](https://github.com/shub39/Rush) | GitHub stars | Lyrics search app: backups, background images, saving lyrics cards | [Source](https://github.com/shub39/Rush/blob/master/shared/ui/build.gradle.kts) | +| [IReader](https://github.com/IReaderorg/IReader) | GitHub stars | Novel reader: storage folder picker on desktop and iOS | [Source](https://github.com/IReaderorg/IReader/blob/master/presentation/build.gradle.kts) | +| [Hammer Editor](https://github.com/Darkrock-Studios/hammer-editor) | GitHub stars | Story and novel writing tool: imports, exports, project images | [Source](https://github.com/Darkrock-Studios/hammer-editor/blob/develop/composeUi/build.gradle.kts) | +| [Edconv](https://github.com/edneyosf/Edconv) | GitHub stars | FFmpeg interface for video and audio conversion: picks input media files | [Source](https://github.com/edneyosf/Edconv/blob/main/composeApp/build.gradle.kts) | +| [kitshn](https://github.com/kitshn-app/kitshn) | GitHub stars | Tandoor recipes client for Android, iOS, and desktop: recipe photo picker | [Source](https://github.com/kitshn-app/kitshn/blob/main/shared/build.gradle.kts) | +| [Morphe Desktop](https://github.com/MorpheApp/morphe-desktop) | GitHub stars | Desktop APK patching tool: file and directory pickers | [Source](https://github.com/MorpheApp/morphe-desktop/blob/main/build.gradle.kts) | +| [Heron](https://github.com/tunjid/heron) | GitHub stars | Bluesky client: media picker for posts and profiles, Coil previews, saving images to the gallery | [Source](https://github.com/tunjid/heron/blob/main/ui/media/build.gradle.kts) | +| [Askimo](https://github.com/askimo-ai/askimo) | GitHub stars | AI desktop app: file and folder pickers, file saver | [Source](https://github.com/askimo-ai/askimo/blob/main/desktop-shared/build.gradle.kts) | +| [Komelia](https://github.com/Snd-R/Komelia) | GitHub stars | Komga media client: poster uploads, fonts, offline downloads, drag and drop | [Source](https://github.com/Snd-R/Komelia/blob/main/komelia-ui/build.gradle.kts) | +| [Flocon](https://github.com/openflocon/Flocon) | GitHub stars | Desktop debugging companion for Android and KMP apps: CSV, Markdown, and image exports | [Source](https://github.com/openflocon/Flocon/blob/main/FloconDesktop/composeApp/build.gradle.kts) | +| [Pixelix](https://github.com/ghostbyte-dev/pixelix) | GitHub stars | Pixelfed client: image and video picker in the post editor | [Source](https://github.com/ghostbyte-dev/pixelix/blob/dev/sharedUI/build.gradle.kts) | +| [AndroidToolKit](https://github.com/LazyIonEs/AndroidToolKit) | GitHub stars | Desktop tools for Android developers: file and directory pickers | [Source](https://github.com/LazyIonEs/AndroidToolKit/blob/main/shared/build.gradle.kts) | +| [DevAnalyzer](https://github.com/Coding-Meet/DevAnalyzer) | GitHub stars | Project analysis tool for developers: picks the project directory to analyze | [Source](https://github.com/Coding-Meet/DevAnalyzer/blob/main/composeApp/build.gradle.kts) | +| [PixelSafe](https://github.com/StefanOltmann/pixelsafe) | GitHub stars | Steganography tool for PNG images: picks the image and saves the result | [Source](https://github.com/StefanOltmann/pixelsafe/blob/main/app/build.gradle.kts) | +| [Butler](https://github.com/HLCaptain/butler) | GitHub stars | AI chat app: picks chat attachments | [Source](https://github.com/HLCaptain/butler/blob/master/composeApp/feature/chat/build.gradle.kts) | +| [Gluky](https://github.com/N7ghtm4r3/Gluky-Clients), [Refy](https://github.com/N7ghtm4r3/Refy-Clients), [Pandoro](https://github.com/N7ghtm4r3/Pandoro-Clients), [Neutron](https://github.com/N7ghtm4r3/Neutron-Clients) | | Self-hosted apps: profile pictures and image uploads | [Gluky](https://github.com/N7ghtm4r3/Gluky-Clients/blob/main/composeApp/build.gradle.kts), [Refy](https://github.com/N7ghtm4r3/Refy-Clients/blob/main/composeApp/build.gradle.kts), [Pandoro](https://github.com/N7ghtm4r3/Pandoro-Clients/blob/main/composeApp/build.gradle.kts), [Neutron](https://github.com/N7ghtm4r3/Neutron-Clients/blob/main/composeApp/build.gradle.kts) | + +### Libraries + +| Library | Stars | How it uses FileKit | Source | +| --- | --- | --- | --- | +| [ComposeMediaPlayer](https://github.com/kdroidFilter/ComposeMediaPlayer) | GitHub stars | Media player for Compose Multiplatform: opens a `PlatformFile` in the player | [Source](https://github.com/kdroidFilter/ComposeMediaPlayer/blob/master/mediaplayer/build.gradle.kts) | +| [kmpalette](https://github.com/jordond/kmpalette) | GitHub stars | Color palettes from images: builds a palette from a `PlatformFile` | [Source](https://github.com/jordond/kmpalette/blob/main/extensions-file/build.gradle.kts) | + +## Commercial and closed-source apps + +The developers of these apps shared how they use FileKit in the [showcase discussion](https://github.com/vinceglb/FileKit/discussions/343). + +| App | How it uses FileKit | Source | +| --- | --- | --- | +| [Ashampoo Photo Organizer](https://www.ashampoo.com/en-us/photo-organizer-free) | Photo management for large collections | [Discussion post](https://github.com/vinceglb/FileKit/discussions/343#discussioncomment-13911389) | +| [Splital](https://splital.com/) | Shared expenses app on [Android](https://play.google.com/store/apps/details?id=com.splital.project) and [iOS](https://apps.apple.com/us/app/splital-settle-up-easily/id6501984581): receipt and profile photos, image compression, PDF and CSV export | [Discussion post](https://github.com/vinceglb/FileKit/discussions/343#discussioncomment-13923299) | +| [Tracker for Bluesky](https://play.google.com/store/apps/details?id=com.bluesky.followers.analyzer) | Bluesky follower analytics on [Android](https://play.google.com/store/apps/details?id=com.bluesky.followers.analyzer) and [iOS](https://apps.apple.com/us/app/tracker-manager-for-bluesky/id6740998282): JSON export and import to move data between phones | [Discussion post](https://github.com/vinceglb/FileKit/discussions/343#discussioncomment-13936833) | +| [Parrot Workout Tracker](https://parrotworkouttracker.com/) | Fitness log on [Android](https://play.google.com/store/apps/details?id=de.kreiniker.parrotworkouttracker) and [iOS](https://apps.apple.com/us/app/workout-tracker-log-parrot/id6741729053): data and routine import and export, sharing workout images | [Discussion post](https://github.com/vinceglb/FileKit/discussions/343#discussioncomment-13960874) | +| [Authmeister](https://monoroh.com/authmeister) | OTP authenticator on [Android](https://play.google.com/store/apps/details?id=com.kopylovis.authmeister) and [iOS](https://apps.apple.com/us/app/authmeister/id6742833866) | [Discussion post](https://github.com/vinceglb/FileKit/discussions/343#discussioncomment-15861152) | +| [Dancing Decibels](https://www.dancingdecibels.com) | Music festival app: artist image imports, schedule import and export | [Discussion post](https://github.com/vinceglb/FileKit/discussions/343#discussioncomment-15865180) | +| [Composables SVG to Compose](https://composables.com/svg-to-compose) | Web tool to convert SVG to Compose code. Its Compose version used FileKit to pick files | [Discussion post](https://github.com/vinceglb/FileKit/discussions/343#discussioncomment-13905300) | ## Add your project -Using FileKit in your project? Share it in the [showcase discussion](https://github.com/vinceglb/FileKit/discussions/343) and it can be added to this page. +Using FileKit in your project? Share it in the [showcase discussion](https://github.com/vinceglb/FileKit/discussions/343) with a link to the code or a short note on how you use FileKit, and it can be added to this page. See what developers say on the [wall of love](/wall-of-love). diff --git a/docs/snippets/quote-card.jsx b/docs/snippets/quote-card.jsx new file mode 100644 index 00000000..fc40cde7 --- /dev/null +++ b/docs/snippets/quote-card.jsx @@ -0,0 +1,37 @@ +// Quote cards for the wall of love and the introduction page. Styles live in /style.css (`.fk-quote*`). +// Usage: +// import { QuoteGrid, QuoteCard } from '/snippets/quote-card.jsx' +// +// +// +// `layout="wall"` is a masonry of any number of cards; `layout="row"` puts up to three cards side by side. +// `avatar` is a GitHub login used for the profile picture; without it the card shows the author's initial. +// Quotes are exact: keep the original wording and mark cuts with "[...]". Line breaks in `quote` are kept. +export const QuoteGrid = ({ layout = 'wall', children }) => ( +
+
{children}
+
+) + +export const QuoteCard = ({ quote, name, role, avatar, handle, platform, date, href }) => ( +
+ +
{quote}
+
+ + {avatar ? ( + + ) : ( + + )} + + {name} + {role ? {role} : null} + + + + {handle ? `${handle} on ` : ''}{platform}, {date} + +
+
+) diff --git a/docs/snippets/used-by.jsx b/docs/snippets/used-by.jsx new file mode 100644 index 00000000..a9f9faff --- /dev/null +++ b/docs/snippets/used-by.jsx @@ -0,0 +1,16 @@ +// Text-only "used by" banner for the introduction page (no logos). Styles live in /style.css (`.fk-used-by*`). +// Usage: +// import { UsedBy } from '/snippets/used-by.jsx' +// +export const UsedBy = ({ items = [], href = '/showcase' }) => ( +
+
+ {items.map((item) => ( + + {item.name} + {item.detail} + + ))} +
+
+) diff --git a/docs/style.css b/docs/style.css index ef39539a..03dc5b4e 100644 --- a/docs/style.css +++ b/docs/style.css @@ -2,3 +2,196 @@ img.nav-logo { height: 1.375rem; } + +/* Community: quote cards (snippets/quote-card.jsx) and the "used by" banner (snippets/used-by.jsx) */ +.fk-quotes { + margin: 1.5rem 0; + container-type: inline-size; +} + +.fk-quotes-wall > div { + column-width: 15rem; + column-gap: 1rem; +} + +.fk-quotes-wall .fk-quote { + break-inside: avoid; + margin: 0 0 1rem; +} + +.fk-quotes-row > div { + display: grid; + grid-template-columns: minmax(0, 1fr); + gap: 1rem; +} + +@container (min-width: 36rem) { + .fk-quotes-row > div { + grid-template-columns: repeat(3, minmax(0, 1fr)); + } +} + +.fk-quote { + display: flex; + flex-direction: column; + margin: 0; + padding: 1.25rem; + border-radius: 1rem; + border: 1px solid rgb(17 24 39 / 0.08); + background: rgb(255 255 255); + box-shadow: 0 1px 2px rgb(17 24 39 / 0.04); + transition: border-color 150ms ease; +} + +.fk-quote:hover { + border-color: rgb(26 127 75 / 0.45); +} + +.dark .fk-quote { + border-color: rgb(255 255 255 / 0.1); + background: rgb(255 255 255 / 0.03); + box-shadow: none; +} + +.dark .fk-quote:hover { + border-color: rgb(227 194 102 / 0.45); +} + +.fk-quote-mark { + height: 1.25rem; + font-family: Georgia, 'Times New Roman', serif; + font-size: 2.5rem; + line-height: 1; + color: #1a7f4b; +} + +.dark .fk-quote-mark { + color: #e3c266; +} + +.fk-quote blockquote { + margin: 0.5rem 0 1.25rem; + padding: 0; + border: 0; + font-style: normal; + font-size: 0.95rem; + line-height: 1.6; + white-space: pre-line; + color: rgb(17 24 39 / 0.88); +} + +.dark .fk-quote blockquote { + color: rgb(255 255 255 / 0.85); +} + +.fk-quote figcaption { + margin-top: auto; +} + +.fk-quote-author { + display: flex; + align-items: center; + gap: 0.75rem; +} + +.fk-quote-author > span:last-child { + display: flex; + flex-direction: column; + min-width: 0; +} + +.fk-quote-avatar { + display: flex; + align-items: center; + justify-content: center; + flex-shrink: 0; + width: 2.25rem; + height: 2.25rem; + margin: 0; + border-radius: 9999px; + object-fit: cover; + font-weight: 600; + font-size: 0.9rem; + color: #1a7f4b; + background: rgb(26 127 75 / 0.12); +} + +.dark .fk-quote-avatar { + color: #e3c266; + background: rgb(227 194 102 / 0.12); +} + +.fk-quote-name { + font-weight: 600; + font-size: 0.875rem; + line-height: 1.35; +} + +.fk-quote-meta { + font-size: 0.8rem; + line-height: 1.35; + opacity: 0.65; +} + +.fk-quote-source { + display: block; + margin-top: 0.75rem; + padding-top: 0.75rem; + border-top: 1px solid rgb(128 128 128 / 0.15); + color: inherit; + text-decoration: underline; + text-decoration-color: rgb(128 128 128 / 0.5); + text-underline-offset: 2px; +} + +.fk-used-by { + margin: 1.5rem 0; + container-type: inline-size; +} + +.fk-used-by > div { + display: grid; + grid-template-columns: repeat(2, minmax(0, 1fr)); + gap: 0.75rem; +} + +@container (min-width: 36rem) { + .fk-used-by > div { + grid-template-columns: repeat(4, minmax(0, 1fr)); + } +} + +.fk-used-by a { + display: flex; + flex-direction: column; + gap: 0.2rem; + padding: 0.9rem 1rem; + border-radius: 0.75rem; + border: 1px solid rgb(17 24 39 / 0.08); + color: inherit; + text-decoration: none; + transition: border-color 150ms ease; +} + +.fk-used-by a:hover { + border-color: rgb(26 127 75 / 0.45); +} + +.dark .fk-used-by a { + border-color: rgb(255 255 255 / 0.1); +} + +.dark .fk-used-by a:hover { + border-color: rgb(227 194 102 / 0.45); +} + +.fk-used-by-name { + font-weight: 600; + font-size: 1rem; + letter-spacing: -0.01em; +} + +.fk-used-by-detail { + font-size: 0.78rem; + opacity: 0.65; +} diff --git a/docs/wall-of-love.mdx b/docs/wall-of-love.mdx new file mode 100644 index 00000000..e389e367 --- /dev/null +++ b/docs/wall-of-love.mdx @@ -0,0 +1,263 @@ +--- +title: 'Wall of love' +sidebarTitle: 'Wall of love' +description: 'What developers say about FileKit, quoted from public posts, issues, and discussions' +mode: 'wide' +--- + +import { QuoteGrid, QuoteCard } from '/snippets/quote-card.jsx' + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +## Share yours + +Built something with FileKit? Tell us in [GitHub Discussions](https://github.com/vinceglb/FileKit/discussions) or mention [@vinceglb](https://x.com/vinceglb) on X. To list your project, see the [showcase](/showcase).