diff --git a/novels.json b/novels.json new file mode 100644 index 0000000..26d385a --- /dev/null +++ b/novels.json @@ -0,0 +1,110 @@ +[ + { + "id": 1, + "kind": "LightNovel", + "title": "That Time I Got Reincarnated as a Slime", + "synopsis": "Lonely thirty-seven-year-old Satoru Mikami is stuck in a dead-end job, unhappy with his mundane life, but after dying at the hands of a robber, he awakens to a fresh start in a fantasy realm...as a slime monster! As he acclimates to his goopy new existence, his exploits with the other monsters set off a chain of events that will change his new world forever!", + "cover": "https://upload.wikimedia.org/wikipedia/en/8/8c/That_Time_I_Got_Reincarnated_as_a_Slime_light_novel_volume_1_cover.jpg", + "authors": "Fuse", + "artists": "Mitz Vah", + "genres": "Fantasy, Isekai, Comedy, Adventure, Action, Shounen", + "chapters": [ + { + "number": 1, + "volume": 1, + "title": "Reincarnated as a Slime", + "content": "Officia nostrud exercitation anim nisi ullamco minim eiusmod nulla esse non consectetur voluptate minim. Sunt duis adipisicing aliqua veniam adipisicing ullamco ex amet consequat sint veniam. Veniam nulla excepteur incididunt incididunt non mollit nulla. Aliquip ut exercitation eu ullamco et ut. Culpa velit et ipsum dolore ex eiusmod sint cupidatat mollit sunt est eu proident cillum. Velit velit ut mollit qui laborum reprehenderit eu tempor amet sunt labore pariatur. Veniam et nostrud consectetur aliquip aliqua aliquip.\nLaborum minim pariatur nulla est eiusmod magna proident ipsum. Nulla ut do in ut proident ex veniam. Ullamco et aliquip ipsum anim qui et ullamco ullamco veniam. Magna ad excepteur consectetur dolore aute commodo aliquip esse dolor.\nDeserunt dolore nisi in esse non. Velit consectetur sunt amet ullamco ad sunt reprehenderit qui magna duis eu esse irure. Est occaecat duis proident pariatur velit esse commodo est pariatur aliqua eiusmod ex. Magna voluptate deserunt ipsum cupidatat laborum Lorem esse pariatur. Eiusmod mollit exercitation reprehenderit reprehenderit. Voluptate sunt elit nulla culpa velit nisi in ipsum cupidatat cupidatat qui sit.\nPariatur do adipisicing fugiat consectetur commodo. Incididunt adipisicing ut exercitation eiusmod non laboris culpa nisi non anim veniam mollit ipsum. Ipsum sit ea consectetur non commodo aliqua nisi aute commodo culpa. Officia consequat dolore labore cillum dolore voluptate reprehenderit Lorem. Eu laboris aute minim aute commodo dolor irure. Cillum non tempor culpa non esse ex.\nDuis esse adipisicing elit culpa ad proident consectetur enim qui et occaecat sit sunt ex. Voluptate eiusmod dolor minim laboris velit. Consequat pariatur eiusmod ex Lorem sint consectetur fugiat aliquip dolor non." + }, + { + "number": 2, + "volume": 1, + "title": "Meeting the Goblins", + "content": "Officia nostrud exercitation anim nisi ullamco minim eiusmod nulla esse non consectetur voluptate minim. Sunt duis adipisicing aliqua veniam adipisicing ullamco ex amet consequat sint veniam. Veniam nulla excepteur incididunt incididunt non mollit nulla. Aliquip ut exercitation eu ullamco et ut. Culpa velit et ipsum dolore ex eiusmod sint cupidatat mollit sunt est eu proident cillum. Velit velit ut mollit qui laborum reprehenderit eu tempor amet sunt labore pariatur. Veniam et nostrud consectetur aliquip aliqua aliquip.\nLaborum minim pariatur nulla est eiusmod magna proident ipsum. Nulla ut do in ut proident ex veniam. Ullamco et aliquip ipsum anim qui et ullamco ullamco veniam. Magna ad excepteur consectetur dolore aute commodo aliquip esse dolor.\nDeserunt dolore nisi in esse non. Velit consectetur sunt amet ullamco ad sunt reprehenderit qui magna duis eu esse irure. Est occaecat duis proident pariatur velit esse commodo est pariatur aliqua eiusmod ex. Magna voluptate deserunt ipsum cupidatat laborum Lorem esse pariatur. Eiusmod mollit exercitation reprehenderit reprehenderit. Voluptate sunt elit nulla culpa velit nisi in ipsum cupidatat cupidatat qui sit.\nPariatur do adipisicing fugiat consectetur commodo. Incididunt adipisicing ut exercitation eiusmod non laboris culpa nisi non anim veniam mollit ipsum. Ipsum sit ea consectetur non commodo aliqua nisi aute commodo culpa. Officia consequat dolore labore cillum dolore voluptate reprehenderit Lorem. Eu laboris aute minim aute commodo dolor irure. Cillum non tempor culpa non esse ex.\nDuis esse adipisicing elit culpa ad proident consectetur enim qui et occaecat sit sunt ex. Voluptate eiusmod dolor minim laboris velit. Consequat pariatur eiusmod ex Lorem sint consectetur fugiat aliquip dolor non." + }, + { + "number": 3, + "volume": 1, + "title": "The Goblin's Treasure", + "content": "Officia nostrud exercitation anim nisi ullamco minim eiusmod nulla esse non consectetur voluptate minim. Sunt duis adipisicing aliqua veniam adipisicing ullamco ex amet consequat sint veniam. Veniam nulla excepteur incididunt incididunt non mollit nulla. Aliquip ut exercitation eu ullamco et ut. Culpa velit et ipsum dolore ex eiusmod sint cupidatat mollit sunt est eu proident cillum. Velit velit ut mollit qui laborum reprehenderit eu tempor amet sunt labore pariatur. Veniam et nostrud consectetur aliquip aliqua aliquip.\nLaborum minim pariatur nulla est eiusmod magna proident ipsum. Nulla ut do in ut proident ex veniam. Ullamco et aliquip ipsum anim qui et ullamco ullamco veniam. Magna ad excepteur consectetur dolore aute commodo aliquip esse dolor.\nDeserunt dolore nisi in esse non. Velit consectetur sunt amet ullamco ad sunt reprehenderit qui magna duis eu esse irure. Est occaecat duis proident pariatur velit esse commodo est pariatur aliqua eiusmod ex. Magna voluptate deserunt ipsum cupidatat laborum Lorem esse pariatur. Eiusmod mollit exercitation reprehenderit reprehenderit. Voluptate sunt elit nulla culpa velit nisi in ipsum cupidatat cupidatat qui sit.\nPariatur do adipisicing fugiat consectetur commodo. Incididunt adipisicing ut exercitation eiusmod non laboris culpa nisi non anim veniam mollit ipsum. Ipsum sit ea consectetur non commodo aliqua nisi aute commodo culpa. Officia consequat dolore labore cillum dolore voluptate reprehenderit Lorem. Eu laboris aute minim aute commodo dolor irure. Cillum non tempor culpa non esse ex.\nDuis esse adipisicing elit culpa ad proident consectetur enim qui et occaecat sit sunt ex. Voluptate eiusmod dolor minim laboris velit. Consequat pariatur eiusmod ex Lorem sint consectetur fugiat aliquip dolor non." + }, + { + "number": 4, + "volume": 1, + "title": "A New Friend", + "content": "Officia nostrud exercitation anim nisi ullamco minim eiusmod nulla esse non consectetur voluptate minim. Sunt duis adipisicing aliqua veniam adipisicing ullamco ex amet consequat sint veniam. Veniam nulla excepteur incididunt incididunt non mollit nulla. Aliquip ut exercitation eu ullamco et ut. Culpa velit et ipsum dolore ex eiusmod sint cupidatat mollit sunt est eu proident cillum. Velit velit ut mollit qui laborum reprehenderit eu tempor amet sunt labore pariatur. Veniam et nostrud consectetur aliquip aliqua aliquip.\nLaborum minim pariatur nulla est eiusmod magna proident ipsum. Nulla ut do in ut proident ex veniam. Ullamco et aliquip ipsum anim qui et ullamco ullamco veniam. Magna ad excepteur consectetur dolore aute commodo aliquip esse dolor.\nDeserunt dolore nisi in esse non. Velit consectetur sunt amet ullamco ad sunt reprehenderit qui magna duis eu esse irure. Est occaecat duis proident pariatur velit esse commodo est pariatur aliqua eiusmod ex. Magna voluptate deserunt ipsum cupidatat laborum Lorem esse pariatur. Eiusmod mollit exercitation reprehenderit reprehenderit. Voluptate sunt elit nulla culpa velit nisi in ipsum cupidatat cupidatat qui sit.\nPariatur do adipisicing fugiat consectetur commodo. Incididunt adipisicing ut exercitation eiusmod non laboris culpa nisi non anim veniam mollit ipsum. Ipsum sit ea consectetur non commodo aliqua nisi aute commodo culpa. Officia consequat dolore labore cillum dolore voluptate reprehenderit Lorem. Eu laboris aute minim aute commodo dolor irure. Cillum non tempor culpa non esse ex.\nDuis esse adipisicing elit culpa ad proident consectetur enim qui et occaecat sit sunt ex. Voluptate eiusmod dolor minim laboris velit. Consequat pariatur eiusmod ex Lorem sint consectetur fugiat aliquip dolor non." + } + ] + }, + { + "id": 2, + "kind": "LightNovel", + "title": "Eighty-Six", + "synopsis": "EIGHTY-SIX (Stylized as 86 EIGHTY-SIX) is the story of two ends in a fictional war. In The Republic of San Magnolia, a war is being raged against machine drones known as The Legion. The Republic boasts that, through their own autonomous drones, they can fight a battle with no casualties.", + "cover": "https://upload.wikimedia.org/wikipedia/en/4/4a/86_light_novel_volume_1_cover.jpg", + "authors": "Asato Asato", + "artists": "Shirabi", + "genres": "Drama, Military, Sci-Fi", + "chapters": [ + { + "number": 0, + "volume": 1, + "title": "The Forces Under Her Majesty, the Queen.", + "content": "Officia nostrud exercitation anim nisi ullamco minim eiusmod nulla esse non consectetur voluptate minim. Sunt duis adipisicing aliqua veniam adipisicing ullamco ex amet consequat sint veniam. Veniam nulla excepteur incididunt incididunt non mollit nulla. Aliquip ut exercitation eu ullamco et ut. Culpa velit et ipsum dolore ex eiusmod sint cupidatat mollit sunt est eu proident cillum. Velit velit ut mollit qui laborum reprehenderit eu tempor amet sunt labore pariatur. Veniam et nostrud consectetur aliquip aliqua aliquip.\nLaborum minim pariatur nulla est eiusmod magna proident ipsum. Nulla ut do in ut proident ex veniam. Ullamco et aliquip ipsum anim qui et ullamco ullamco veniam. Magna ad excepteur consectetur dolore aute commodo aliquip esse dolor.\nDeserunt dolore nisi in esse non. Velit consectetur sunt amet ullamco ad sunt reprehenderit qui magna duis eu esse irure. Est occaecat duis proident pariatur velit esse commodo est pariatur aliqua eiusmod ex. Magna voluptate deserunt ipsum cupidatat laborum Lorem esse pariatur. Eiusmod mollit exercitation reprehenderit reprehenderit. Voluptate sunt elit nulla culpa velit nisi in ipsum cupidatat cupidatat qui sit.\nPariatur do adipisicing fugiat consectetur commodo. Incididunt adipisicing ut exercitation eiusmod non laboris culpa nisi non anim veniam mollit ipsum. Ipsum sit ea consectetur non commodo aliqua nisi aute commodo culpa. Officia consequat dolore labore cillum dolore voluptate reprehenderit Lorem. Eu laboris aute minim aute commodo dolor irure. Cillum non tempor culpa non esse ex.\nDuis esse adipisicing elit culpa ad proident consectetur enim qui et occaecat sit sunt ex. Voluptate eiusmod dolor minim laboris velit. Consequat pariatur eiusmod ex Lorem sint consectetur fugiat aliquip dolor non." + }, + { + "number": 1, + "volume": 1, + "title": "The Battlefield Without Deaths", + "content": "Officia nostrud exercitation anim nisi ullamco minim eiusmod nulla esse non consectetur voluptate minim. Sunt duis adipisicing aliqua veniam adipisicing ullamco ex amet consequat sint veniam. Veniam nulla excepteur incididunt incididunt non mollit nulla. Aliquip ut exercitation eu ullamco et ut. Culpa velit et ipsum dolore ex eiusmod sint cupidatat mollit sunt est eu proident cillum. Velit velit ut mollit qui laborum reprehenderit eu tempor amet sunt labore pariatur. Veniam et nostrud consectetur aliquip aliqua aliquip.\nLaborum minim pariatur nulla est eiusmod magna proident ipsum. Nulla ut do in ut proident ex veniam. Ullamco et aliquip ipsum anim qui et ullamco ullamco veniam. Magna ad excepteur consectetur dolore aute commodo aliquip esse dolor.\nDeserunt dolore nisi in esse non. Velit consectetur sunt amet ullamco ad sunt reprehenderit qui magna duis eu esse irure. Est occaecat duis proident pariatur velit esse commodo est pariatur aliqua eiusmod ex. Magna voluptate deserunt ipsum cupidatat laborum Lorem esse pariatur. Eiusmod mollit exercitation reprehenderit reprehenderit. Voluptate sunt elit nulla culpa velit nisi in ipsum cupidatat cupidatat qui sit.\nPariatur do adipisicing fugiat consectetur commodo. Incididunt adipisicing ut exercitation eiusmod non laboris culpa nisi non anim veniam mollit ipsum. Ipsum sit ea consectetur non commodo aliqua nisi aute commodo culpa. Officia consequat dolore labore cillum dolore voluptate reprehenderit Lorem. Eu laboris aute minim aute commodo dolor irure. Cillum non tempor culpa non esse ex.\nDuis esse adipisicing elit culpa ad proident consectetur enim qui et occaecat sit sunt ex. Voluptate eiusmod dolor minim laboris velit. Consequat pariatur eiusmod ex Lorem sint consectetur fugiat aliquip dolor non." + }, + { + "number": 2, + "volume": 1, + "title": "I'm Westen Nichts Neues¹", + "content": "Officia nostrud exercitation anim nisi ullamco minim eiusmod nulla esse non consectetur voluptate minim. Sunt duis adipisicing aliqua veniam adipisicing ullamco ex amet consequat sint veniam. Veniam nulla excepteur incididunt incididunt non mollit nulla. Aliquip ut exercitation eu ullamco et ut. Culpa velit et ipsum dolore ex eiusmod sint cupidatat mollit sunt est eu proident cillum. Velit velit ut mollit qui laborum reprehenderit eu tempor amet sunt labore pariatur. Veniam et nostrud consectetur aliquip aliqua aliquip.\nLaborum minim pariatur nulla est eiusmod magna proident ipsum. Nulla ut do in ut proident ex veniam. Ullamco et aliquip ipsum anim qui et ullamco ullamco veniam. Magna ad excepteur consectetur dolore aute commodo aliquip esse dolor.\nDeserunt dolore nisi in esse non. Velit consectetur sunt amet ullamco ad sunt reprehenderit qui magna duis eu esse irure. Est occaecat duis proident pariatur velit esse commodo est pariatur aliqua eiusmod ex. Magna voluptate deserunt ipsum cupidatat laborum Lorem esse pariatur. Eiusmod mollit exercitation reprehenderit reprehenderit. Voluptate sunt elit nulla culpa velit nisi in ipsum cupidatat cupidatat qui sit.\nPariatur do adipisicing fugiat consectetur commodo. Incididunt adipisicing ut exercitation eiusmod non laboris culpa nisi non anim veniam mollit ipsum. Ipsum sit ea consectetur non commodo aliqua nisi aute commodo culpa. Officia consequat dolore labore cillum dolore voluptate reprehenderit Lorem. Eu laboris aute minim aute commodo dolor irure. Cillum non tempor culpa non esse ex.\nDuis esse adipisicing elit culpa ad proident consectetur enim qui et occaecat sit sunt ex. Voluptate eiusmod dolor minim laboris velit. Consequat pariatur eiusmod ex Lorem sint consectetur fugiat aliquip dolor non." + }, + { + "number": 3, + "volume": 1, + "title": "You Seem More Inspiring When You're Standing Before the Gates of Hades", + "content": "Officia nostrud exercitation anim nisi ullamco minim eiusmod nulla esse non consectetur voluptate minim. Sunt duis adipisicing aliqua veniam adipisicing ullamco ex amet consequat sint veniam. Veniam nulla excepteur incididunt incididunt non mollit nulla. Aliquip ut exercitation eu ullamco et ut. Culpa velit et ipsum dolore ex eiusmod sint cupidatat mollit sunt est eu proident cillum. Velit velit ut mollit qui laborum reprehenderit eu tempor amet sunt labore pariatur. Veniam et nostrud consectetur aliquip aliqua aliquip.\nLaborum minim pariatur nulla est eiusmod magna proident ipsum. Nulla ut do in ut proident ex veniam. Ullamco et aliquip ipsum anim qui et ullamco ullamco veniam. Magna ad excepteur consectetur dolore aute commodo aliquip esse dolor.\nDeserunt dolore nisi in esse non. Velit consectetur sunt amet ullamco ad sunt reprehenderit qui magna duis eu esse irure. Est occaecat duis proident pariatur velit esse commodo est pariatur aliqua eiusmod ex. Magna voluptate deserunt ipsum cupidatat laborum Lorem esse pariatur. Eiusmod mollit exercitation reprehenderit reprehenderit. Voluptate sunt elit nulla culpa velit nisi in ipsum cupidatat cupidatat qui sit.\nPariatur do adipisicing fugiat consectetur commodo. Incididunt adipisicing ut exercitation eiusmod non laboris culpa nisi non anim veniam mollit ipsum. Ipsum sit ea consectetur non commodo aliqua nisi aute commodo culpa. Officia consequat dolore labore cillum dolore voluptate reprehenderit Lorem. Eu laboris aute minim aute commodo dolor irure. Cillum non tempor culpa non esse ex.\nDuis esse adipisicing elit culpa ad proident consectetur enim qui et occaecat sit sunt ex. Voluptate eiusmod dolor minim laboris velit. Consequat pariatur eiusmod ex Lorem sint consectetur fugiat aliquip dolor non." + } + ] + }, + { + "id": 3, + "kind": "LightNovel", + "title": "The Classroom of the Elite", + "synopsis": "Koudo Ikusei Senior High School is a prestigious school with state-of-the-art facilities where almost 100% of the students go on to college or find employment. The students are allowed to wear any hairstyle and bring any personal items they want. Koudo Ikusei Senior High School is a paradise, but the truth is that only the best students receive favorable treatment.\nThe protagonist, Kiyotaka Ayanokouji, is a student of Class D, which is where the school dumps the \"inferior\" students in order to ridicule them. For some reason, Kiyotaka was uninterested in his entrance exam, and was placed in Class D. After meeting Suzune Horikita and Kikyou, two other students in his class, his situation begins to change.", + "cover": "https://upload.wikimedia.org/wikipedia/pt/5/52/Y%C5%8Dkoso_Jitsuryoku_Shij%C5%8D_Shugi_no_Ky%C5%8Dshitsu_e%2C_Volume_1.jpg", + "authors": "Shougo Kinugasa", + "artists": "Shougo Kinugasa", + "genres": "Comedy, Slice of Life, School, Fantasy, Psychological, Romance", + "chapters": [ + { + "number": 0, + "volume": 1, + "title": "Prólogo: The Structure of Japanese Society", + "content": "Officia nostrud exercitation anim nisi ullamco minim eiusmod nulla esse non consectetur voluptate minim. Sunt duis adipisicing aliqua veniam adipisicing ullamco ex amet consequat sint veniam. Veniam nulla excepteur incididunt incididunt non mollit nulla. Aliquip ut exercitation eu ullamco et ut. Culpa velit et ipsum dolore ex eiusmod sint cupidatat mollit sunt est eu proident cillum. Velit velit ut mollit qui laborum reprehenderit eu tempor amet sunt labore pariatur. Veniam et nostrud consectetur aliquip aliqua aliquip.\nLaborum minim pariatur nulla est eiusmod magna proident ipsum. Nulla ut do in ut proident ex veniam. Ullamco et aliquip ipsum anim qui et ullamco ullamco veniam. Magna ad excepteur consectetur dolore aute commodo aliquip esse dolor.\nDeserunt dolore nisi in esse non. Velit consectetur sunt amet ullamco ad sunt reprehenderit qui magna duis eu esse irure. Est occaecat duis proident pariatur velit esse commodo est pariatur aliqua eiusmod ex. Magna voluptate deserunt ipsum cupidatat laborum Lorem esse pariatur. Eiusmod mollit exercitation reprehenderit reprehenderit. Voluptate sunt elit nulla culpa velit nisi in ipsum cupidatat cupidatat qui sit.\nPariatur do adipisicing fugiat consectetur commodo. Incididunt adipisicing ut exercitation eiusmod non laboris culpa nisi non anim veniam mollit ipsum. Ipsum sit ea consectetur non commodo aliqua nisi aute commodo culpa. Officia consequat dolore labore cillum dolore voluptate reprehenderit Lorem. Eu laboris aute minim aute commodo dolor irure. Cillum non tempor culpa non esse ex.\nDuis esse adipisicing elit culpa ad proident consectetur enim qui et occaecat sit sunt ex. Voluptate eiusmod dolor minim laboris velit. Consequat pariatur eiusmod ex Lorem sint consectetur fugiat aliquip dolor non." + }, + { + "number": 1, + "volume": 1, + "title": "Capítulo 1: Welcome to My Dream Student Life", + "content": "Officia nostrud exercitation anim nisi ullamco minim eiusmod nulla esse non consectetur voluptate minim. Sunt duis adipisicing aliqua veniam adipisicing ullamco ex amet consequat sint veniam. Veniam nulla excepteur incididunt incididunt non mollit nulla. Aliquip ut exercitation eu ullamco et ut. Culpa velit et ipsum dolore ex eiusmod sint cupidatat mollit sunt est eu proident cillum. Velit velit ut mollit qui laborum reprehenderit eu tempor amet sunt labore pariatur. Veniam et nostrud consectetur aliquip aliqua aliquip.\nLaborum minim pariatur nulla est eiusmod magna proident ipsum. Nulla ut do in ut proident ex veniam. Ullamco et aliquip ipsum anim qui et ullamco ullamco veniam. Magna ad excepteur consectetur dolore aute commodo aliquip esse dolor.\nDeserunt dolore nisi in esse non. Velit consectetur sunt amet ullamco ad sunt reprehenderit qui magna duis eu esse irure. Est occaecat duis proident pariatur velit esse commodo est pariatur aliqua eiusmod ex. Magna voluptate deserunt ipsum cupidatat laborum Lorem esse pariatur. Eiusmod mollit exercitation reprehenderit reprehenderit. Voluptate sunt elit nulla culpa velit nisi in ipsum cupidatat cupidatat qui sit.\nPariatur do adipisicing fugiat consectetur commodo. Incididunt adipisicing ut exercitation eiusmod non laboris culpa nisi non anim veniam mollit ipsum. Ipsum sit ea consectetur non commodo aliqua nisi aute commodo culpa. Officia consequat dolore labore cillum dolore voluptate reprehenderit Lorem. Eu laboris aute minim aute commodo dolor irure. Cillum non tempor culpa non esse ex.\nDuis esse adipisicing elit culpa ad proident consectetur enim qui et occaecat sit sunt ex. Voluptate eiusmod dolor minim laboris velit. Consequat pariatur eiusmod ex Lorem sint consectetur fugiat aliquip dolor non." + }, + { + "number": 2, + "volume": 1, + "title": "Capítulo 2: Class D Students", + "content": "Officia nostrud exercitation anim nisi ullamco minim eiusmod nulla esse non consectetur voluptate minim. Sunt duis adipisicing aliqua veniam adipisicing ullamco ex amet consequat sint veniam. Veniam nulla excepteur incididunt incididunt non mollit nulla. Aliquip ut exercitation eu ullamco et ut. Culpa velit et ipsum dolore ex eiusmod sint cupidatat mollit sunt est eu proident cillum. Velit velit ut mollit qui laborum reprehenderit eu tempor amet sunt labore pariatur. Veniam et nostrud consectetur aliquip aliqua aliquip.\nLaborum minim pariatur nulla est eiusmod magna proident ipsum. Nulla ut do in ut proident ex veniam. Ullamco et aliquip ipsum anim qui et ullamco ullamco veniam. Magna ad excepteur consectetur dolore aute commodo aliquip esse dolor.\nDeserunt dolore nisi in esse non. Velit consectetur sunt amet ullamco ad sunt reprehenderit qui magna duis eu esse irure. Est occaecat duis proident pariatur velit esse commodo est pariatur aliqua eiusmod ex. Magna voluptate deserunt ipsum cupidatat laborum Lorem esse pariatur. Eiusmod mollit exercitation reprehenderit reprehenderit. Voluptate sunt elit nulla culpa velit nisi in ipsum cupidatat cupidatat qui sit.\nPariatur do adipisicing fugiat consectetur commodo. Incididunt adipisicing ut exercitation eiusmod non laboris culpa nisi non anim veniam mollit ipsum. Ipsum sit ea consectetur non commodo aliqua nisi aute commodo culpa. Officia consequat dolore labore cillum dolore voluptate reprehenderit Lorem. Eu laboris aute minim aute commodo dolor irure. Cillum non tempor culpa non esse ex.\nDuis esse adipisicing elit culpa ad proident consectetur enim qui et occaecat sit sunt ex. Voluptate eiusmod dolor minim laboris velit. Consequat pariatur eiusmod ex Lorem sint consectetur fugiat aliquip dolor non." + }, + { + "number": 3, + "volume": 1, + "title": "Capítulo 3: Ladies and Gentlemen, Thank You for Waiting!", + "content": "Officia nostrud exercitation anim nisi ullamco minim eiusmod nulla esse non consectetur voluptate minim. Sunt duis adipisicing aliqua veniam adipisicing ullamco ex amet consequat sint veniam. Veniam nulla excepteur incididunt incididunt non mollit nulla. Aliquip ut exercitation eu ullamco et ut. Culpa velit et ipsum dolore ex eiusmod sint cupidatat mollit sunt est eu proident cillum. Velit velit ut mollit qui laborum reprehenderit eu tempor amet sunt labore pariatur. Veniam et nostrud consectetur aliquip aliqua aliquip.\nLaborum minim pariatur nulla est eiusmod magna proident ipsum. Nulla ut do in ut proident ex veniam. Ullamco et aliquip ipsum anim qui et ullamco ullamco veniam. Magna ad excepteur consectetur dolore aute commodo aliquip esse dolor.\nDeserunt dolore nisi in esse non. Velit consectetur sunt amet ullamco ad sunt reprehenderit qui magna duis eu esse irure. Est occaecat duis proident pariatur velit esse commodo est pariatur aliqua eiusmod ex. Magna voluptate deserunt ipsum cupidatat laborum Lorem esse pariatur. Eiusmod mollit exercitation reprehenderit reprehenderit. Voluptate sunt elit nulla culpa velit nisi in ipsum cupidatat cupidatat qui sit.\nPariatur do adipisicing fugiat consectetur commodo. Incididunt adipisicing ut exercitation eiusmod non laboris culpa nisi non anim veniam mollit ipsum. Ipsum sit ea consectetur non commodo aliqua nisi aute commodo culpa. Officia consequat dolore labore cillum dolore voluptate reprehenderit Lorem. Eu laboris aute minim aute commodo dolor irure. Cillum non tempor culpa non esse ex.\nDuis esse adipisicing elit culpa ad proident consectetur enim qui et occaecat sit sunt ex. Voluptate eiusmod dolor minim laboris velit. Consequat pariatur eiusmod ex Lorem sint consectetur fugiat aliquip dolor non." + } + ] + } +] diff --git a/source/hooks/useCachedResources.ts b/source/hooks/useCachedResources.ts index 05c519e..48755cc 100644 --- a/source/hooks/useCachedResources.ts +++ b/source/hooks/useCachedResources.ts @@ -17,10 +17,8 @@ export default function useCachedResources() { ...Feather.font, }); - try { + if (!dataSource.isInitialized) { await dataSource.initialize(); - } catch (e) { - console.warn(e); } } diff --git a/source/navigation/navigators/BottomTab.tsx b/source/navigation/navigators/BottomTab.tsx index 6a24fad..0caba2a 100644 --- a/source/navigation/navigators/BottomTab.tsx +++ b/source/navigation/navigators/BottomTab.tsx @@ -2,6 +2,7 @@ import FeatherIcon from '@expo/vector-icons/Feather'; import { createBottomTabNavigator } from '@react-navigation/bottom-tabs'; import HistoryScreen from '../../screens/History'; +import HomeScreen from '../../screens/Home'; import LibraryScreen from '../../screens/Library'; import SettingsScreen from '../../screens/Settings'; import UpdatesScreen from '../../screens/Updates'; @@ -12,16 +13,24 @@ const BottomTab = createBottomTabNavigator(); export default function BottomTabNavigator() { return ( + , + }} + /> + , + tabBarIcon: ({ color }) => , }} /> diff --git a/source/navigation/types.tsx b/source/navigation/types.tsx index 711490b..5038110 100644 --- a/source/navigation/types.tsx +++ b/source/navigation/types.tsx @@ -25,6 +25,7 @@ export type RootStackScreenProps = Nati // @react-navigation/bottom-tabs export type RootBottomTabParamList = { + Home: undefined; Library: undefined; Updates: undefined; History: undefined; diff --git a/source/screens/Home/components/NovelList/index.tsx b/source/screens/Home/components/NovelList/index.tsx new file mode 100644 index 0000000..18b919f --- /dev/null +++ b/source/screens/Home/components/NovelList/index.tsx @@ -0,0 +1,50 @@ +// TODO: Add a lightly shadowed background container of + +import { FlatList, Image, ListRenderItemInfo } from 'react-native'; + +import { Chapters, Container, TextContainer, Title } from './styles'; +import type NovelEntity from '../../../../database/entities/NovelEntity'; + +interface NovelListProps { + novels: NovelEntity[]; +} + +export default function NovelList({ novels }: NovelListProps) { + function renderItem({ item }: ListRenderItemInfo) { + return ( + + + {item.title} + {item.chapters.length} Chapter(s) + + + + + ); + } + + return ( + item.id.toString()} + style={{ + marginHorizontal: -4, + marginVertical: 15, + }} + showsVerticalScrollIndicator={false} + contentContainerStyle={{ + paddingVertical: 8, + }} + /> + ); +} diff --git a/source/screens/Home/components/NovelList/styles.ts b/source/screens/Home/components/NovelList/styles.ts new file mode 100644 index 0000000..8c4ea00 --- /dev/null +++ b/source/screens/Home/components/NovelList/styles.ts @@ -0,0 +1,32 @@ +import styled from 'styled-components/native'; + +export const Container = styled.ImageBackground.attrs({ + blurRadius: 4, + borderRadius: 12, +})` + flex-direction: row; + justify-content: space-between; + align-items: flex-end; + + margin: 0 8px; + padding: 16px; + width: 350px; + opacity: 0.75; +`; + +export const TextContainer = styled.View.attrs({ + flex: 1, + display: 'flex', + marginRight: 10, +})``; + +export const Title = styled.Text` + font-size: 16px; + font-weight: bold; + color: ${({ theme }) => theme.shades[900]}; +`; + +export const Chapters = styled.Text` + font-size: 14px; + color: ${({ theme }) => theme.shades[600]}; +`; diff --git a/source/screens/Home/components/Search/index.tsx b/source/screens/Home/components/Search/index.tsx new file mode 100644 index 0000000..a7bd772 --- /dev/null +++ b/source/screens/Home/components/Search/index.tsx @@ -0,0 +1,26 @@ +// TODO: Add behavior to close keyboard when user click outside of the input. +// TODO: Add a close button to clear the input. + +import type { NativeSyntheticEvent, TextInputSubmitEditingEventData } from 'react-native'; + +import { SearchContainer, SearchIcon, SearchInput } from './styles'; + +interface SearchProps { + placeholder: string; + onSearch: (search: string) => void; +} + +export default function Search({ placeholder, onSearch }: SearchProps) { + function handleOnSubmitEditing(e: NativeSyntheticEvent) { + if (e.nativeEvent.text) { + onSearch(e.nativeEvent.text); + } + } + + return ( + + + + + ); +} diff --git a/source/screens/Home/components/Search/styles.ts b/source/screens/Home/components/Search/styles.ts new file mode 100644 index 0000000..dfe8e56 --- /dev/null +++ b/source/screens/Home/components/Search/styles.ts @@ -0,0 +1,30 @@ +import Feather from '@expo/vector-icons/Feather'; +import styled from 'styled-components/native'; + +export const SearchContainer = styled.View` + flex-direction: row; + align-items: center; + + padding: 10px 15px; + border-radius: 15px; + + background-color: ${({ theme }) => theme.shades[100]}; +`; + +export const SearchIcon = styled(Feather).attrs((props) => ({ + size: 20, + name: 'search', + color: props.theme.shades[300], +}))``; + +export const SearchInput = styled.TextInput.attrs((props) => ({ + placeholderTextColor: props.theme.shades[300], + selectionColor: props.theme.primary, +}))` + flex: 1; + font-size: 14px; + margin-left: 10px; + + font-size: 16px; + color: ${({ theme }) => theme.shades[600]}; +`; diff --git a/source/screens/Home/index.tsx b/source/screens/Home/index.tsx new file mode 100644 index 0000000..ea1bf39 --- /dev/null +++ b/source/screens/Home/index.tsx @@ -0,0 +1,17 @@ +// TODO: Create a new component to handle the NovelList and NovelCategory + +import NovelList from './components/NovelList'; +import Search from './components/Search'; +import { Container } from './styles'; +import novels from '../../../novels.json'; +import NovelEntity from '../../database/entities/NovelEntity'; +import type { RootBottomTabScreenProps } from '../../navigation/types'; + +export default function Home({ navigation, route }: RootBottomTabScreenProps<'Home'>) { + return ( + + + + + ); +} diff --git a/source/screens/Home/styles.ts b/source/screens/Home/styles.ts new file mode 100644 index 0000000..3dc73c5 --- /dev/null +++ b/source/screens/Home/styles.ts @@ -0,0 +1,12 @@ +import { SafeAreaView } from 'react-native-safe-area-context'; +import styled from 'styled-components/native'; + +export const Container = styled(SafeAreaView)` + background-color: ${({ theme }) => theme.shades[0]}; + + display: flex; + align-items: center; + justify-content: center; + + margin: 15px; +`;