Skip to content

Commit 61f1286

Browse files
Merge pull request #16 from solid/feat/my-storages
Updated the README
2 parents 1e73a72 + a9cfadc commit 61f1286

1 file changed

Lines changed: 90 additions & 43 deletions

File tree

README.md

Lines changed: 90 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# Solid File Manager
22

3-
A Google Drive-like file manager for Solid Pods, built with Next.js, React, and TypeScript.
3+
A file manager application for managing Solid Pods, built on Solid, with Next.js, React, and TypeScript.
44

55
## Overview
66

@@ -14,35 +14,63 @@ This application provides a user-friendly interface for managing files and folde
1414

1515
## Features
1616

17-
### Current UI Features (Phase 1)
17+
### Core Functionality
1818

19-
- ✅ Google Drive-like interface layout
20-
- ✅ Left sidebar with drives list
21-
- ✅ Main content area with file list
22-
- ✅ Grid and list view toggle
23-
- ✅ Breadcrumb navigation
24-
- ✅ File item display with icons and metadata
25-
- ✅ Permissions/sharing dialog (UI only)
26-
- ✅ Minimal black, white, and light purple color scheme
27-
- ✅ Semantic HTML for accessibility
28-
29-
### Planned Features (Phase 2 - Integration)
30-
31-
- [ ] Solid authentication (OIDC)
32-
- [ ] File operations (create, read, update, delete)
33-
- [ ] Folder navigation
34-
- [ ] ACP permission management integration
35-
- [ ] Storage root discovery from WebID
36-
- [ ] File upload/download
37-
- [ ] Real-time file updates
19+
- **Solid Authentication (OIDC)**: Full OIDC authentication with session management and persistence
20+
- **Storage Root Discovery**: Automatically discovers and displays all storage roots from WebID profile using `pim:storage` and `solid:storage` predicates
21+
- **File & Folder Navigation**: Browse through folders with double-click navigation and breadcrumb support
22+
- **Grid and List Views**: Toggle between grid and list views for file browsing
23+
- **Breadcrumb Navigation**: Navigate through folder hierarchy with clickable breadcrumbs
24+
- **Caching**: In-memory caching for WebID profiles and container contents to improve UX and reduce redundant requests
25+
26+
### File Operations
27+
28+
- **Create Folders**: Create new folders with custom names
29+
- **Rename Files/Folders**: Rename resources using `.meta` files to preserve resource URIs and shared links
30+
- **Copy Files/Folders**: Copy files and folders with automatic name collision handling (e.g., "Copy of file", "Copy of file (1)")
31+
- **Move Files**: Move files between folders within the same storage
32+
- **Delete Files/Folders**: Delete resources from your Pod
33+
- **File Upload**: Upload files to your Pod via file picker
34+
- **File Preview**: Preview various file types:
35+
- Images (displayed in modal)
36+
- PDFs (opened in new tab)
37+
- Word documents (.doc, .docx - opened in new tab)
38+
- Text files (displayed in modal)
39+
- Common text files without extensions (e.g., README)
40+
41+
### User Interface
42+
43+
- **Google Drive-like Interface**: Clean, modern interface with familiar UX patterns
44+
- **Left Sidebar**: Displays all available file manager menus
45+
- **File Item Display**: Shows files and folders with appropriate icons, metadata, and context menus
46+
- **Context Menus**: Hover on folder/file and click the menu button to access the file operations menu dropdown (Rename, Copy, Move, Delete, Preview, Download)
47+
- **Modals & Dialogs**:
48+
- Rename dialog for renaming resources
49+
- Move dialog for selecting destination folder
50+
- Preview modal for viewing files
51+
- Permissions dialog (UI ready)
52+
- **Loading States**: Loading spinners and error displays throughout
53+
- **Toast Notifications**: User feedback for all operations
54+
- **Minimal Design**: Black, white, and light purple color scheme
55+
- **Semantic HTML**: Accessible markup with ARIA labels
56+
57+
### Technical Features
58+
59+
- **Metadata Management**: Uses `.meta` files for storing display names and preserving resource URIs
60+
- **Session Management**: Centralized session utilities for authentication
61+
- **Profile Caching**: Cached WebID profile fetching to prevent redundant requests
62+
- **Error Handling**: Comprehensive error handling with user-friendly messages
63+
- **Type Safety**: Full TypeScript support throughout
3864

3965
## Tech Stack
4066

4167
- **Framework**: Next.js 16
4268
- **UI Library**: React 19
4369
- **Styling**: Tailwind CSS 4
4470
- **Language**: TypeScript
45-
- **Solid SDK**: [@inrupt/solid-client-js](https://github.com/inrupt/solid-client-js) (to be integrated)
71+
- **Solid SDK**: [@inrupt/solid-client-js](https://github.com/inrupt/solid-client-js)
72+
- **Icons**: [@heroicons/react](https://heroicons.com/)
73+
- **Notifications**: [react-hot-toast](https://react-hot-toast.com/)
4674

4775
## Getting Started
4876

@@ -101,26 +129,60 @@ NEXT_PUBLIC_OIDC_ISSUER="https://login.inrupt.com"
101129
solid-file-manager/
102130
├── app/
103131
│ ├── components/ # React components
132+
│ │ ├── AuthWrapper.tsx # Authentication wrapper
133+
│ │ ├── FileManager.tsx # Main file manager component
104134
│ │ ├── Header.tsx # Top header with search and actions
105135
│ │ ├── Sidebar.tsx # Left sidebar with drives list
106136
│ │ ├── Breadcrumb.tsx # Navigation breadcrumb
107137
│ │ ├── FileList.tsx # Main file list component
108138
│ │ ├── FileItem.tsx # Individual file/folder item
109-
│ │ └── PermissionsDialog.tsx # Sharing/permissions dialog
139+
│ │ ├── FileItemMenu.tsx # Context menu for file operations
140+
│ │ ├── NewFolderDialog.tsx # Dialog for creating folders
141+
│ │ ├── RenameDialog.tsx # Dialog for renaming resources
142+
│ │ ├── MoveDialog.tsx # Dialog for moving files
143+
│ │ ├── PreviewModal.tsx # Modal for previewing files
144+
│ │ ├── PermissionsDialog.tsx # Sharing/permissions dialog
145+
│ │ ├── FileUploadHandler.tsx # File upload component
146+
│ │ ├── ProfileIcon.tsx # User profile icon and logout
147+
│ │ ├── LoginPage.tsx # Login page
148+
│ │ └── shared/ # Shared/reusable components
149+
│ │ ├── Button.tsx
150+
│ │ ├── Input.tsx
151+
│ │ ├── Modal.tsx
152+
│ │ ├── LoadingSpinner.tsx
153+
│ │ └── ...
154+
│ ├── lib/
155+
│ │ ├── hooks/ # Custom React hooks
156+
│ │ │ ├── useSolidStorages.ts # Hook for discovering storages
157+
│ │ │ ├── useBrowseStorage.ts # Hook for browsing containers
158+
│ │ │ └── useUserProfile.ts # Hook for user profile
159+
│ │ └── helpers/ # Utility functions
160+
│ │ ├── sessionUtils.ts # Session management
161+
│ │ ├── profileUtils.ts # WebID profile utilities
162+
│ │ ├── metaFileUtils.ts # .meta file operations
163+
│ │ ├── copyUtils.ts # Copy and move operations
164+
│ │ ├── fileTypeUtils.ts # File type detection
165+
│ │ └── ...
110166
│ ├── page.tsx # Main page component
111167
│ ├── layout.tsx # Root layout
112-
│ └── globals.css # Global styles
168+
│ └── globals.css # Global styles
113169
├── public/ # Static assets
114170
└── README.md
115171
```
116172

117173
## Solid Protocol Integration
118174

119-
This application will integrate with Solid using:
175+
This application integrates with Solid using:
120176

121177
- **Solid Protocol**: [https://solidproject.org/TR/protocol#resources](https://solidproject.org/TR/protocol#resources)
122-
- **ACP (Access Control Policies)**: [https://solid.github.io/authorization-panel/acp-specification/](https://solid.github.io/authorization-panel/acp-specification/)
123-
- **Storage Root Discovery**: Using `pim:storage` predicate from WebID
178+
- **ACP (Access Control Policies)**: [https://solid.github.io/authorization-panel/acp-specification/](https://solid.github.io/authorization-panel/acp-specification/) (UI ready, full integration pending)
179+
- **Storage Root Discovery**:
180+
- Uses `pim:storage` predicate from WebID profile
181+
- Uses `solid:storage` predicate as fallback
182+
- Supports hierarchical traversal for storage discovery
183+
- **Metadata Management**:
184+
- Uses `.meta` files for storing display names (following Solid conventions)
185+
- Preserves resource URIs when renaming (maintains shared links)
124186
- **SDK**: [@inrupt/solid-client-js](https://github.com/inrupt/solid-client-js)
125187

126188
## Design Principles
@@ -130,25 +192,10 @@ This application will integrate with Solid using:
130192
- **Code Splitting**: Components are split into reusable, focused modules
131193
- **Type Safety**: Full TypeScript support for type safety
132194

133-
## Contributing
134-
135-
This project is currently in active development. The UI phase is complete, and Solid integration is the next step.
136-
137-
## License
138-
139-
[Add your license here]
140-
141195
## References
142196

143197
- [Solid Project](https://solidproject.org/)
144198
- [Solid Protocol Specification](https://solidproject.org/TR/protocol)
145199
- [ACP Specification](https://solid.github.io/authorization-panel/acp-specification/)
146200
- [Inrupt Solid Client JS](https://github.com/inrupt/solid-client-js)
147-
- [Community Solid Server](https://github.com/CommunitySolidServer/CommunitySolidServer)
148-
149-
## Related Projects
150-
151-
- [nextfm](https://github.com/inrupt/nextfm)
152-
- [Penny](https://penny.vincenttunru.com/)
153-
- [PodPro](https://podpro.dev/)
154-
- [solid-filemanager](https://otto-aa.github.io/solid-filemanager/)
201+
- [Community Solid Server](https://github.com/CommunitySolidServer/CommunitySolidServer)

0 commit comments

Comments
 (0)