diff --git a/lib/Controller/PageController.php b/lib/Controller/PageController.php
index 0f2a630..aba5ddb 100644
--- a/lib/Controller/PageController.php
+++ b/lib/Controller/PageController.php
@@ -4,6 +4,9 @@ declare(strict_types=1);
 
 namespace OCA\OpdsCatalog\Controller;
 
+use Kiwilan\Ebook\Ebook;
+use Kiwilan\Opds\Entries\OpdsEntryBook;
+use Kiwilan\Opds\Entries\OpdsEntryBookAuthor;
 use Kiwilan\Opds\Entries\OpdsEntryNavigation;
 use Kiwilan\Opds\Enums\OpdsVersionEnum;
 use Kiwilan\Opds\Opds;
@@ -38,7 +41,7 @@ class PageController extends Controller
 
 	#[NoCSRFRequired]
 	#[NoAdminRequired]
-	#[FrontpageRoute(verb: 'GET', url: '/{path}', requirements: ['path' => '.+'])]
+	#[FrontpageRoute(verb: 'GET', url: '/index/{path}', requirements: ['path' => '.*'])]
 	public function index(string $path): Response {
 		$userFolder = $this->rootFolder->getUserFolder($this->user->getUID());
 		$root = $userFolder->get($path);
@@ -50,13 +53,44 @@ class PageController extends Controller
 					$feeds[] = new OpdsEntryNavigation(
 						(string) $node->getId(),
 						$node->getName(),
-						$userFolder->getRelativePath($node->getPath()) ?? $path.'/'.$node->getName(),
+						$this->urlGenerator->linkToRouteAbsolute(
+							'opds_catalog.page.index',
+							['path' => $userFolder->getRelativePath($node->getPath()) ?? $path.'/'.$node->getName()]
+						),
 						properties: [
 							'numberOfItems' => count($node->getDirectoryListing()),
 						],
 						updated: new \DateTime('@'.$node->getMTime())
 					);
 				} elseif ($node instanceof File) {
+					$ebook = Ebook::read($node->getPath());
+					if ($ebook instanceof Ebook) {
+						$authors = [];
+						foreach ($ebook->getAuthors() as $author) {
+							if (null !== $author->getName()) {
+								$authors[] = new OpdsEntryBookAuthor($author->getName());
+							}
+						}
+
+						$feeds[] = new OpdsEntryBook(
+							(string) $node->getId(),
+							$ebook->getTitle() ?? $ebook->getFilename(),
+							$this->urlGenerator->linkToRoute('opds_catalog.page.books', ['path' => $path.'/'.$node->getName()]),
+							summary: $ebook->getDescription(),
+							media: $this->urlGenerator->linkTo('', 'core/preview', ['fileId' => $node->getId(), 'x' => 1024, 'y' => 1024]),
+							updated: new \DateTime('@'.$node->getMTime()),
+							download: $this->urlGenerator->linkTo('', 'remote.php/dav/files/'.$this->user->getUID().'/'.$userFolder->getRelativePath($node->getPath())),
+							mediaThumbnail: $this->urlGenerator->linkTo('', 'core/preview', ['fileId' => $node->getId()]),
+							categories: $ebook->getTags(),
+							authors: $authors,
+							published: $ebook->getPublishDate(),
+							volume: $ebook->getVolume(),
+							serie: $ebook->getSeries(),
+							language: $ebook->getLanguage(),
+							identifier: $ebook->getIdentifiers()[0]->getValue(),
+							publisher: $ebook->getPublisher()
+						);
+					}
 				}
 			}
 		}
@@ -65,12 +99,12 @@ class PageController extends Controller
 			name: $this->user->getDisplayName()."'s Library",
 			author: $this->user->getDisplayName(),
 			iconUrl: $this->urlGenerator->getAbsoluteURL('/avatar/'.$this->user->getUID().'/512'),
-			startUrl: $this->urlGenerator->linkToRoute('opds_catalog.page.index'),
-			searchUrl: $this->urlGenerator->linkToRoute('opds_catalog.page.search')
+			startUrl: $this->urlGenerator->linkToRouteAbsolute('opds_catalog.page.index'),
+			searchUrl: $this->urlGenerator->linkToRouteAbsolute('opds_catalog.page.search')
 		);
-		$opds = Opds::make($config)->get();
-		$response = $opds->getResponse();
 
+		$opds = Opds::make($config)->feeds($feeds)->get();
+		$response = $opds->getResponse();
 		if ($response instanceof OpdsResponse) {
 			if (OpdsVersionEnum::v1Dot2 === $opds->getVersion()) {
 				// @phpstan-ignore-next-line