Compare commits
291 Commits
coffee-bra
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2844c5ad5e | ||
|
|
40024c5945 | ||
|
|
4a44d35985 | ||
|
|
dd9807a929 | ||
|
|
11822842f0 | ||
|
|
dafefcf6b3 | ||
|
|
07f1f66360 | ||
|
|
56ef6eecd0 | ||
|
|
650d9ba116 | ||
|
|
af2c3309fc | ||
|
|
5a1a11d461 | ||
|
|
240aa60cbe | ||
|
|
35e0e76220 | ||
|
|
962d13ba02 | ||
|
|
897e916f62 | ||
|
|
76b4feef0d | ||
|
|
cb0f09f359 | ||
|
|
bf88bcfaeb | ||
|
|
7a7505ac5e | ||
|
|
a30a93569c | ||
|
|
41b4e47494 | ||
|
|
a18f7a23cf | ||
|
|
a5ecb7dab3 | ||
|
|
32deebdcf6 | ||
|
|
73efa4443c | ||
|
|
9a55f9ab1e | ||
|
|
357e72a887 | ||
|
|
d29ce7d24c | ||
|
|
76858735ed | ||
|
|
90959ff6c4 | ||
|
|
0c4450a4a5 | ||
|
|
436a3e149a | ||
|
|
046d0330be | ||
|
|
66737e2aab | ||
|
|
42a1065c48 | ||
|
|
483e534fcd | ||
|
|
98f39c0ecf | ||
|
|
402c8ce7ed | ||
|
|
febd71338f | ||
|
|
bc5075dc80 | ||
|
|
9eb334bf85 | ||
|
|
8d02dbfd60 | ||
|
|
e2d431d67d | ||
|
|
6c42389d72 | ||
|
|
a7f12ac7e5 | ||
|
|
52747a1b76 | ||
|
|
90f9bc88f5 | ||
|
|
0566905e42 | ||
|
|
13bbce624f | ||
|
|
a9a7440ed3 | ||
|
|
3a41378d29 | ||
|
|
751a16ca3e | ||
|
|
ab70c2764b | ||
|
|
5ddeafb2fb | ||
|
|
53e2941d4a | ||
|
|
fe916127e2 | ||
|
|
bef88206ae | ||
|
|
d898b99562 | ||
|
|
e86b26a72e | ||
|
|
48b16e1c8d | ||
|
|
ba8bd2f045 | ||
|
|
569741d47c | ||
|
|
923ef1ee9d | ||
|
|
7a162b1f04 | ||
|
|
a81ac25651 | ||
|
|
33efad1281 | ||
|
|
52918bae4d | ||
|
|
a989ca1b6a | ||
|
|
e6382aa88a | ||
|
|
3890f96456 | ||
|
|
add51b7e82 | ||
|
|
cc0515d66c | ||
|
|
1632af7b67 | ||
|
|
b405c7a806 | ||
|
|
26656bafa9 | ||
|
|
9c966cc21e | ||
|
|
a39e38c580 | ||
|
|
2d71afbf5e | ||
|
|
6c43a5f56d | ||
|
|
8c80de361c | ||
|
|
a893ef1171 | ||
|
|
b125c6e705 | ||
|
|
7fc9dca26e | ||
|
|
de3b3db21e | ||
|
|
9e415f4c73 | ||
|
|
0e9f96be27 | ||
|
|
73058d651f | ||
|
|
fb0cba56bb | ||
|
|
5214f0cbba | ||
|
|
9d944378c8 | ||
|
|
7af707a571 | ||
|
|
9a821212bd | ||
|
|
f78852620c | ||
|
|
e0c1230289 | ||
|
|
283ddf3ced | ||
|
|
bf4fda7318 | ||
|
|
2ac25fdbfb | ||
|
|
f8fe3e8953 | ||
|
|
10aa58a3ed | ||
|
|
faa40a2130 | ||
|
|
3e9c89c4bc | ||
|
|
7a9b648e58 | ||
|
|
fee2000ed2 | ||
|
|
3e1fd761e8 | ||
|
|
a284140772 | ||
|
|
4b192c8108 | ||
|
|
2bea8f1e1d | ||
|
|
3c998f94fc | ||
|
|
48ea125eba | ||
|
|
9816ab055c | ||
|
|
55387bc554 | ||
|
|
6648b56181 | ||
|
|
a3fa4726d7 | ||
|
|
5d5d90a20a | ||
|
|
700bfb7c9f | ||
|
|
275b1bcc97 | ||
|
|
c13a65aeb2 | ||
|
|
ee180c8068 | ||
|
|
0deea97ec6 | ||
|
|
cf43ea3086 | ||
|
|
5dcc780fc8 | ||
|
|
0793edee1d | ||
|
|
075a221392 | ||
|
|
4ec82e5448 | ||
|
|
40eafd8623 | ||
|
|
8615477f0c | ||
|
|
4a8b11a5cc | ||
|
|
5117828a9d | ||
|
|
e74a6e1ec0 | ||
|
|
c9b56c3a4f | ||
|
|
5c56e8540f | ||
|
|
33d545a26b | ||
|
|
3489f3d5c3 | ||
|
|
28c6f9eaf8 | ||
|
|
ce30d8b8b4 | ||
|
|
2656b43f51 | ||
|
|
50b542189c | ||
|
|
3a0b94c846 | ||
|
|
2412ec36f9 | ||
|
|
c2aae6dbd5 | ||
|
|
c03eab472b | ||
|
|
4bde8e6f0f | ||
|
|
6bac7895ac | ||
|
|
3bbc985ea3 | ||
|
|
a226450410 | ||
|
|
d5c6cd0be6 | ||
|
|
97522a0332 | ||
|
|
d656841cb3 | ||
|
|
f62088d411 | ||
|
|
c85124cc55 | ||
|
|
1489b1359e | ||
|
|
e9e9b6755c | ||
|
|
18cc21b60d | ||
|
|
050ad48cd8 | ||
|
|
eedf0ba7f1 | ||
|
|
819ce9ba7c | ||
|
|
fe5aefd2c6 | ||
|
|
30141d31f3 | ||
|
|
1bfb3321a3 | ||
|
|
69d0848ed5 | ||
|
|
43345db743 | ||
|
|
4daab218a0 | ||
|
|
b3982bd426 | ||
|
|
f258bea951 | ||
|
|
5163baa13b | ||
|
|
cd2c9ee334 | ||
|
|
8dbfeb1059 | ||
|
|
9f2a822a54 | ||
|
|
ef9fc03843 | ||
|
|
454ada1ee6 | ||
|
|
e2264c0eeb | ||
|
|
695d92f465 | ||
|
|
549b560748 | ||
|
|
7bd8e6682b | ||
|
|
f4446aff07 | ||
|
|
fbec5ca04a | ||
|
|
c8634462fc | ||
|
|
eee53f2f60 | ||
|
|
c527547008 | ||
|
|
44c779acb5 | ||
|
|
96d806ed6d | ||
|
|
872b09fe52 | ||
|
|
fb36c7cde8 | ||
|
|
5df6370439 | ||
|
|
f36a9615a7 | ||
|
|
8cd6ba59d7 | ||
|
|
e1962883f6 | ||
|
|
193f06bb21 | ||
|
|
68e0dbe1cb | ||
|
|
dd7b9b6efb | ||
|
|
a1fa7011cd | ||
|
|
e50712e5bc | ||
|
|
c94bd9f3b3 | ||
|
|
de1bba855f | ||
|
|
fbfd6d8384 | ||
|
|
08ba2f9cbd | ||
|
|
6bc3393293 | ||
|
|
04cc460bb5 | ||
|
|
3abe7db364 | ||
|
|
1a70bf665e | ||
|
|
5dc79eeca6 | ||
|
|
52e63d7c1d | ||
|
|
c6197e9646 | ||
|
|
18ef998136 | ||
|
|
64d9be9221 | ||
|
|
6e251e0699 | ||
|
|
de9a3d4040 | ||
|
|
02148006ae | ||
|
|
76f2f431c1 | ||
|
|
5bb6865ba6 | ||
|
|
9fe8505ea4 | ||
|
|
52285301d1 | ||
|
|
843ed75db7 | ||
|
|
d723ec905b | ||
|
|
3bd0ce9bd6 | ||
|
|
828a68fa75 | ||
|
|
1593c00620 | ||
|
|
4d81bf3fe1 | ||
|
|
f985c157d9 | ||
|
|
defa5cb196 | ||
|
|
b4cde4c777 | ||
|
|
b8b957805e | ||
|
|
d620d9d08b | ||
|
|
0f3d13c58a | ||
|
|
63633fcf57 | ||
|
|
98013de897 | ||
|
|
40d8e36880 | ||
|
|
302806920c | ||
|
|
629c6ef9d2 | ||
|
|
6da704d06a | ||
|
|
7cbabf11c3 | ||
|
|
ad6e84654e | ||
|
|
edad683fac | ||
|
|
a821f2a23d | ||
|
|
4e2f55598f | ||
|
|
f50bdf9006 | ||
|
|
edd2eef7f4 | ||
|
|
3d24c54a6c | ||
|
|
b4b005460f | ||
|
|
1e00c3442c | ||
|
|
fb6e2e8b5d | ||
|
|
89cdab6ad2 | ||
|
|
bba3cfe578 | ||
|
|
b9e8ae5bbf | ||
|
|
1acc7c9007 | ||
|
|
8022843544 | ||
|
|
15c5cd8505 | ||
|
|
c2e244f784 | ||
|
|
49763eecd2 | ||
|
|
63350a60a3 | ||
|
|
5e02e59123 | ||
|
|
08b11eb478 | ||
|
|
c619ae91f6 | ||
|
|
a65474a397 | ||
|
|
3eb0b5b129 | ||
|
|
e8a127c823 | ||
|
|
b1b22e5a1f | ||
|
|
98ebe2ffd9 | ||
|
|
45d98c7e39 | ||
|
|
dcc0c64aea | ||
|
|
e66fb6c054 | ||
|
|
2989f26919 | ||
|
|
5029549e2c | ||
|
|
bbb331f0fa | ||
|
|
c581cc1dfb | ||
|
|
708e20ba85 | ||
|
|
d34d8d49af | ||
|
|
810c497558 | ||
|
|
834854a36c | ||
|
|
066d05c0af | ||
|
|
9bf3627795 | ||
|
|
2b92156cc1 | ||
|
|
4d0e21a999 | ||
|
|
7de464fa23 | ||
|
|
46feb27687 | ||
|
|
9a2318c00c | ||
|
|
8b982eb061 | ||
|
|
4e8712a154 | ||
|
|
f741582866 | ||
|
|
32e21b16ad | ||
|
|
37f4220178 | ||
|
|
75f0f09275 | ||
|
|
3c92a18525 | ||
|
|
71974a19fb | ||
|
|
7ba90048f7 | ||
|
|
896c165222 | ||
|
|
91d197c82e | ||
|
|
d056b55fc9 | ||
|
|
87198913ea | ||
|
|
3b70e71567 | ||
|
|
e865b1f12b |
2
.github/PULL_REQUEST_TEMPLATE.md
vendored
2
.github/PULL_REQUEST_TEMPLATE.md
vendored
@@ -1,3 +1,5 @@
|
||||
(todo:please remove this todo and the sections you did not check below before you make your pull request.
|
||||
If you are unsure, please check other PRs like this one: https://github.com/hackerkid/Mind-Expanding-Books/pull/207#issue-377268434)
|
||||
|
||||
## In this pull request
|
||||
- [ ] I am adding a new book.
|
||||
|
||||
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
||||
.DS_Store
|
||||
@@ -1,10 +1,24 @@
|
||||
# Contribution Guidelines
|
||||
|
||||
Please ensure your pull request adheres to the following guidelines:
|
||||
## What are the criteria for adding a new book?
|
||||
The mission of this list is to curate books that can change the lives of people for the better.
|
||||
|
||||
- Search previous suggestions before making a new one, as yours may be a duplicate.
|
||||
- if you want to add a new book you should have read the book.
|
||||
- Use the following format: `| Book name | Author | [Goodreads rating](Goodreads url) | Year published |`
|
||||
- Mention in pull request clearly why you think the book deserve to be in the list.
|
||||
So you should add a book that has changed your life!!
|
||||
|
||||
Here are some questions that you can potentially ask yourself to help make this decision. If the answer is yes for most of them, feel free to create a pull request!
|
||||
|
||||
1. If you had the money to gift a book to every college graduate this year, would you gift this book?
|
||||
2. Would you gift this book to your children at any point in their lives?
|
||||
3. If there are only 3 books that you can keep a physical copy of in your life, would this book be one of them?
|
||||
4. Would your life have been better off had you read this book 10 years back?
|
||||
5. Would this book be relevant 1000 years from now?
|
||||
|
||||
|
||||
## How to create a pull request?
|
||||
- Search for existing books in [README.md](README.md) and make sure that you are not adding a duplicate.
|
||||
- Insert the book in the following format in [README.md](README.md). Don't change any other files.
|
||||
`| Book name | Author | [Goodreads rating](Goodreads url) | Year published |`
|
||||
- Make sure that the book is inserted in the correct order according to the Goodreads rating.
|
||||
- Mention in pull request clearly why you think the book deserves to be on the list.
|
||||
|
||||
Thank you!
|
||||
|
||||
446
README.md
446
README.md
@@ -1,44 +1,81 @@
|
||||
# Mind Expanding Books
|
||||
|
||||
[](https://github.com/sindresorhus/awesome) [](http://makeapullrequest.com) [](https://gitter.im/hackerkid/Mind-Expanding-Books?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
|
||||
[](https://github.com/sindresorhus/awesome)
|
||||
|
||||
> Curated list of mind expanding books.
|
||||
Looking to find a book an interesting book to read but don't know where to start? You are in the right place!
|
||||
|
||||
See [Contributing Guidelines](CONTRIBUTING.md) for details on how the books are curated.
|
||||
|
||||
<a id="top"></a>
|
||||
## Table of Contents
|
||||
* [Startups and Business](#startups-and-business)
|
||||
* [Philosophy and Psychology](#philosophy-and-psychology)
|
||||
* [Autobiographies and Biographies](#autobiographies-and-biographies)
|
||||
* [History](#history)
|
||||
* [Evolution, Science and Medicine](#science-and-medicine)
|
||||
* [Logic and Problem Solving](#logic-and-problem-solving)
|
||||
* [Politics](#politics)
|
||||
* [Economics](#economics)
|
||||
* [Gender](#gender)
|
||||
* [Sexuality](#sexuality)
|
||||
* [Education](#education)
|
||||
* [Writing](#writing)
|
||||
* [Theater and Film](#theater-and-film)
|
||||
* [Fiction](#fiction)
|
||||
* [Health](#health)
|
||||
* [Design](#design)
|
||||
* [Travel](#travel)
|
||||
- [Mind Expanding Books](#mind-expanding-books)
|
||||
- [Table of Contents](#table-of-contents)
|
||||
- [Books](#books)
|
||||
- [Startups and Business](#startups-and-business)
|
||||
- [Philosophy And Psychology](#philosophy-and-psychology)
|
||||
- [Autobiographies and Biographies](#autobiographies-and-biographies)
|
||||
- [History](#history)
|
||||
- [Science and Medicine](#science-and-medicine)
|
||||
- [Logic and Problem Solving](#logic-and-problem-solving)
|
||||
- [Politics](#politics)
|
||||
- [Economics](#economics)
|
||||
- [Gender](#gender)
|
||||
- [Sexuality](#sexuality)
|
||||
- [Race](#race)
|
||||
- [Education](#education)
|
||||
- [Writing](#writing)
|
||||
- [Theater and Film](#theater-and-film)
|
||||
- [Shakespeare](#shakespeare)
|
||||
- [Fiction](#fiction)
|
||||
- [Classics](#classics)
|
||||
- [Fantasy](#fantasy)
|
||||
- [Historical Fiction](#historical-fiction)
|
||||
- [Humor](#humor)
|
||||
- [Mystery](#mystery)
|
||||
- [Science Fiction](#science-fiction)
|
||||
- [Horror](#horror)
|
||||
- [Miscellaneous](#miscellaneous)
|
||||
- [Health](#health)
|
||||
- [Design](#design)
|
||||
- [Travel](#travel)
|
||||
- [Language](#language)
|
||||
- [Nature](#nature)
|
||||
- [Art](#art)
|
||||
- [Credits](#credits)
|
||||
- [License](#license)
|
||||
|
||||
# Books
|
||||
|
||||
## Startups and Business
|
||||
| Name | Author | Goodreads Rating | Year Published |
|
||||
|------|--------|------------------|----------------|
|
||||
| Shoe Dog: A Memoir by the Creator of Nike | Phil Knight | [4.46](https://www.goodreads.com/book/show/27220736-shoe-dog) | 2016 |
|
||||
| The Ride of a Lifetime: Lessons Learned from 15 Years as CEO of the Walt Disney Company | Robert Iger, Joel Lovell | [4.44](https://www.goodreads.com/book/show/44525305-the-ride-of-a-lifetime) | 2019 |
|
||||
| Bad Blood: Secrets and Lies in a Silicon Valley Startup | John Carreyrou | [4.4](https://www.goodreads.com/book/show/37976541-bad-blood) | 2018 |
|
||||
| The Compound Effect | Darren Hardy | [4.40](https://www.goodreads.com/book/show/9420697-the-compound-effect) | 2010 |
|
||||
| Never Split the Difference | Chris Voss | [4.39](https://www.goodreads.com/book/show/26156469-never-split-the-difference) | 2016 |
|
||||
| Failing to Succeed: The Story of India's First E-Commerce Company | K. Vaitheeswaran | [4.39](https://www.goodreads.com/book/show/35626210-failing-to-succeed) | 2017 |
|
||||
| High Output Management | Andy Grove | [4.38](https://www.goodreads.com/book/show/324750.High_Output_Management) | 1995 |
|
||||
| Outwitting the Devil: The Secret to Freedom and Success | Napoleon Hill | [4.38](https://www.goodreads.com/book/show/10713286-outwitting-the-devil) | 2011 |
|
||||
| The Millionaire Fastlane: Crack the Code to Wealth and Live Rich for a Lifetime! | M.J. DeMarco | [4.28](https://www.goodreads.com/book/show/18872437-the-millionaire-fastlane) | 2011 |
|
||||
| How to Get From Where You Are to Where You Want to Be : The 25 Principles of Success | Jack Canfield, Janet Switzer | [4.26](https://www.goodreads.com/book/show/96593.The_Success_Principles) | 2007 |
|
||||
| The Big Short: Inside the Doomsday Machine | Michael Lewis | [4.26](https://www.goodreads.com/book/show/8032112-the-big-short) | 2015 |
|
||||
| The Future Is Faster Than You Think: How Converging Technologies Are Transforming Business, Industries, and Our Lives | Peter H. Diamandis, Steven Kotler | [4.25](https://www.goodreads.com/book/show/52290273-the-future-is-faster-than-you-think) | 2020 |
|
||||
| The Middle Finger Project | Ash Ambirge | [4.22](https://www.goodreads.com/book/show/46064079-the-middle-finger-project?from_search=true&from_srp=true&qid=WY4obsfps3&rank=1) | 2020 |
|
||||
| Creativity, Inc.: Overcoming the Unseen Forces That Stand in the Way of True Inspiration | Ed Catmull, Amy Wallace | [4.21](https://www.goodreads.com/book/show/18077903-creativity-inc) | 2014 |
|
||||
| The Score Takes Care of Itself: My Philosophy of Leadership | Bill Walsh, Steve Jamison, Craig Walsh | [4.21](https://www.goodreads.com/book/show/6342995-the-score-takes-care-of-itself) | 2009 |
|
||||
| The Hard Thing About Hard Things: Building a Business When There Are No Easy Answers | Ben Horowitz | [4.20](https://www.goodreads.com/book/show/18176747-the-hard-thing-about-hard-things) | 2014 |
|
||||
| Think and Grow Rich | Napoleon Hill | [4.17](https://www.goodreads.com/book/show/30186948-think-and-grow-rich) | 1937 |
|
||||
| AI Superpowers: China, Silicon Valley, and the New World Order | Kai-Fu Lee | [4.16](https://www.goodreads.com/book/show/38242135-ai-superpowers) | 2018 |
|
||||
| Nail it then Scale it: The Entrepreneur's Guide to Creating and Managing Breakthrough | Nathan Furr | [4.13](https://www.goodreads.com/book/show/12236649-nail-it-then-scale-it) | 2011 |
|
||||
| Outliers: Story of Success | Malcolm Gladwell | [4.11](https://www.goodreads.com/work/quotes/3364437-outliers-the-story-of-success) | 2008 |
|
||||
| The Strategy and Tactics of Pricing : A Guide to Move More Profitable | Thomas Nagle, John Hogan, Joseph Zale | [4.09](https://www.goodreads.com/book/show/99919.The_Strategy_and_Tactics_of_Pricing) | 2005 |
|
||||
| Principles: Life and Work | Ray Dalio | [4.07](https://www.goodreads.com/book/show/34536488-principles) | 2017 |
|
||||
| Start with Why: How Great Leaders Inspire Everyone to Take Action | Simon Sinek | [4.07](https://www.goodreads.com/book/show/7108725-start-with-why) | 2009 |
|
||||
| Leaving Microsoft to Change the World: An Entrepreneur's Odyssey to Educate the World's Children | John Wood | [4.07](https://www.goodreads.com/book/show/95429.Leaving_Microsoft_to_Change_the_World) | 2006 |
|
||||
| Hackers and Painters | Paul Graham | [4.06](https://www.goodreads.com/book/show/41793.Hackers_Painters) | 2004 |
|
||||
| How Google Works | Eric Schmidt, Jonathan Rosenberg | [4.06](https://www.goodreads.com/book/show/23158207-how-google-works) | 2014 |
|
||||
| Crucial Conversations: Tools for Talking When Stakes Are High | Kerry Patterson, Joseph Grenny, Ron McMillan, Al Switzler | [4.05](https://www.goodreads.com/book/show/15014.Crucial_Conversations) | 2002 |
|
||||
| Good to Great: Why Some Companies Make the Leap And Others Don't | Jim Collins | [4.05](https://www.goodreads.com/book/show/76865.Good_to_Great) | 2001 |
|
||||
| The Lean Startup: How Constant Innovation Creates Radically Successful Businesses | Eric Ries | [4.04](https://www.goodreads.com/book/show/10127019-the-lean-startup) | 2011 |
|
||||
| The Power of Full Engagement: Managing Energy, Not Time, is the Key to High Performance and Personal Renewal | Jim Loehr, Tony Schwartz | [4.03](http://www.goodreads.com/book/show/68985.The_Power_of_Full_Engagement) | 2005 |
|
||||
@@ -53,7 +90,7 @@
|
||||
| SuperFreakonomics: Global Cooling, Patriotic Prostitutes, and Why Suicide Bombers Should Buy Life Insurance | Steven D. Litt | [3.96](https://www.goodreads.com/book/show/6402364-superfreakonomics) | 2009 |
|
||||
| The Ten Faces of Innovation | Tom Kelley | [3.96](https://www.goodreads.com/book/show/95656.The_Ten_Faces_of_Innovation) | 2005 |
|
||||
| Rich Dad Poor Dad : What The Rich Teach Their Kids About Money That The Poor And Middle Class Don't | Robert T. Kiyosaki | [3.95](https://www.goodreads.com/book/show/69571.Rich_Dad_Poor_Dad) | 1997 |
|
||||
| Founders At Work: Stories Of Startups Early Days | Jessica Livingston | [3.94](https://www.goodreads.com/book/show/98233.Founders_at_Work) | |
|
||||
| Founders At Work: Stories Of Startups Early Days | Jessica Livingston | [3.94](https://www.goodreads.com/book/show/98233.Founders_at_Work) | 2007 |
|
||||
| The Paypal Wars | Eric M. Jackson | [3.94](https://www.goodreads.com/book/show/4052.The_PayPal_Wars) | 2010 |
|
||||
| Lean In : Women, Work and the Will to Lead | Sheryl Sandberg | [3.94](http://www.goodreads.com/book/show/16071764-lean-in) | 2013 |
|
||||
| ReWork: Change the Way You Work Forever | David Heinemeier Hansson | [3.93](https://www.goodreads.com/book/show/6732019-rework) | 2010 |
|
||||
@@ -67,213 +104,296 @@
|
||||
| The Black Swan: The Impact of the Highly Improbable | Nassim Nicholas Taleb | [3.88](http://www.goodreads.com/book/show/242472.The_Black_Swan) | 2007 |
|
||||
| Contagious: Why Things Catch On | Jonah Berger | [3.88](https://www.goodreads.com/book/show/15801967-contagious) | 2013 |
|
||||
| Who Says Elephants Can't Dance?: Leading a Great Enterprise through Dramatic Change | Louis V Gerstner, Jr | [3.88](https://www.goodreads.com/book/show/603985.Who_Says_Elephants_Can_t_Dance_) | 2003 |
|
||||
| Linchpin: Are You Indispensable | Seth Godin | [3.87](https://www.goodreads.com/book/show/7155145-linchpin) | |
|
||||
| Linchpin: Are You Indispensable | Seth Godin | [3.87](https://www.goodreads.com/book/show/7155145-linchpin) | 2010 |
|
||||
| The $100 Startup: Reinvent the Way You Make a Living, Do What You Love, and Create a New Future | Chris Guillebeau | [3.85](https://www.goodreads.com/book/show/12605157-the-100-startup) | 2012 |
|
||||
| Too Big to Fail | Andrew Ross Sorkin | [3.85](https://www.goodreads.com/book/show/6687247-too-big-to-fail) | 2011 |
|
||||
| The Paradox of Choice: Why More Is Less | Barry Shwartz | [3.84](https://www.goodreads.com/book/show/10639.The_Paradox_of_Choice) | 2005 |
|
||||
| The Art of the Start: The Time-Tested, Battle-Hardened Guide for Anyone Starting Anything | Guy Kawasaki | [3.82](https://www.goodreads.com/book/show/37875.The_Art_of_the_Start) | 2004 |
|
||||
| Crowdsourcing: Why the Power of the Crowd Is Driving the Future of Business | Jeff Howe | [3.82](https://www.goodreads.com/book/show/2601510-crowdsourcing) | |
|
||||
| Cognitive Surplus: Creativity and Generosity in a Connected Age | Clay Shirky | [3.82](https://www.goodreads.com/book/show/7614793-cognitive-surplus) | |
|
||||
| Zero to One | Peter Thiel, Blake Masters | [3.75](https://www.goodreads.com/book/show/18050143-zero-to-one) | |
|
||||
| One Click: Jeff Bezos and the Rise of Amazon.com | Richard Brandt | [3.75](https://www.goodreads.com/book/show/11223478-one-click) | |
|
||||
| Crowdsourcing: Why the Power of the Crowd Is Driving the Future of Business | Jeff Howe | [3.82](https://www.goodreads.com/book/show/2601510-crowdsourcing) | 2008 |
|
||||
| Cognitive Surplus: Creativity and Generosity in a Connected Age | Clay Shirky | [3.82](https://www.goodreads.com/book/show/7614793-cognitive-surplus) | 2010 |
|
||||
| Data Driven | D.J. Patil | [3.80](https://www.goodreads.com/book/show/24780653-data-driven) | 2015 |
|
||||
| Zero to One | Peter Thiel, Blake Masters | [3.75](https://www.goodreads.com/book/show/18050143-zero-to-one) | 2014 |
|
||||
| One Click: Jeff Bezos and the Rise of Amazon.com | Richard Brandt | [3.75](https://www.goodreads.com/book/show/11223478-one-click) | 2011 |
|
||||
| Big Data: A Revolution That Will Transform How We Live, Work, and Think | Kenneth Cukier | [3.70](https://www.goodreads.com/book/show/15815598-big-data) | 2013 |
|
||||
| The 4-Hour Work Week: Escape the 9-5, Live Anywhere and Join the New Rich | Timothy Ferriss | [3.61](https://www.goodreads.com/book/show/368593.The_4_Hour_Workweek) | 2012 |
|
||||
| The Accidental Billionaires : The Founding of Facebook, a Tale of Sex, Money, Genius and Betrayal | Ben Mezrich | [3.50](https://www.goodreads.com/book/show/6326920-the-accidental-billionaires) | 2009 |
|
||||
|
||||
If you like Mind Expanding books you should check out my new project http://diff.blog. It's a platform that help you keep updated with the developer community.
|
||||
|
||||
<a href="#top"><img src="https://img.shields.io/badge/Back%20to%20Top-↑-blue"/></a>
|
||||
|
||||
## Philosophy And Psychology
|
||||
| Name | Author | Goodreads Rating | Year Published |
|
||||
|------|--------|------------------|----------------|
|
||||
| The Almanack of Naval Ravikant: A Guide to Wealth and Happiness | Eric Jorgenson | [4.64](https://www.goodreads.com/book/show/54898389-the-almanack-of-naval-ravikant) | 2020 |
|
||||
| Karma Yoga | Swami Vivekanand | [4.51](https://www.goodreads.com/book/show/827031.Karma_Yoga) | 1999 |
|
||||
| The Ascent of Humanity | Charles Eisenstein | [4.43](https://www.goodreads.com/book/show/482505.The_Ascent_of_Humanity) | 2007
|
||||
| Tattoos on the Heart: The Power of Boundless Compassion | Gregory Boyle | [4.41](https://www.goodreads.com/book/show/7090193-tattoos-on-the-heart) | 2010 |
|
||||
| The Slight Edge - Secret to a Successful Life | Jeff Olson | [4.39](https://www.goodreads.com/book/show/590652.The_Slight_Edge) | 2005 |
|
||||
| Education and the Significance of Life | Krishnamurti | [4.38](https://www.goodreads.com/book/show/353435.Education_and_the_Significance_of_Life) | 2008 |
|
||||
| Passions Within Reason: The Strategic Role of the Emotions | Robert H. Frank | [4.34](https://www.goodreads.com/book/show/452114.Passions_Within_Reason) | 1989 |
|
||||
| The Daily Stoic: 366 Meditations on Wisdom, Perseverance, and the Art of Living | Ryan Holiday, Stephan Hanselman | [4.34](https://www.goodreads.com/book/show/29093292-the-daily-stoic) | 2016 |
|
||||
| Man's Search for Meaning | Viktor E. Frankl | [4.33](https://www.goodreads.com/book/show/4069.Man_s_Search_for_Meaning) | 2006 |
|
||||
| Atomic Habits: An Easy & Proven Way to Build Good Habits & Break Bad Ones| James Clear | [4.32](https://www.goodreads.com/book/show/40121378-atomic-habits) | 2018 |
|
||||
| The User Illusion: Cutting Consciousness Down to Size | Tor Norretranders | [4.30](https://www.goodreads.com/book/show/106732.The_User_Illusion) | 1999 |
|
||||
| Born to Run: A Hidden Tribe, Superathletes, and the Greatest Race the World Has Never Seen | Christopher McDougall | [4.27](https://www.goodreads.com/book/show/6289283-born-to-run) | 2009 |
|
||||
| Prometheus Rising | Robert Anton Wilson | [4.26](https://www.goodreads.com/book/show/28597.Prometheus_Rising) | 2010 |
|
||||
| The Concise 48 Laws of Power | Robert Greene | [4.25](https://www.goodreads.com/book/show/18224060-the-concise-48-laws-of-power) | 2011 |
|
||||
| The Hero with a Thousand Faces | Joseph Campbell | [4.24](https://www.goodreads.com/book/show/588138.The_Hero_With_a_Thousand_Faces) | 1972 |
|
||||
| The Magic of Thinking Big | David J. Schwartz | [4.23](https://www.goodreads.com/book/show/759945.The_Magic_of_Thinking_Big) | 1959 |
|
||||
| Zen Mind, Beginner's Mind | Shunryu Suzuki, David Chadwick | [4.23](https://www.goodreads.com/book/show/402843.Zen_Mind_Beginner_s_Mind) | |
|
||||
| The Age of Insight: The Quest to Understand the Unconscious in Art, Mind, and Brain, from Vienna 1900 to the Present | Eric Kandel | [4.22](https://www.goodreads.com/book/show/12263681-the-age-of-insight) | 2012 |
|
||||
| Meditations | Marcus Aurelius | [4.21](https://www.goodreads.com/book/show/30659.Meditations) | |
|
||||
| Influence: The Psychology of Persuasion | Robert B. Cialdini | [4.18](https://www.goodreads.com/book/show/5752.The_Blank_Slate) | 2006 |
|
||||
| The Gift of Fear: Survival Signals That Protect Us from Violence | Gavin de Becker | [4.18](https://www.goodreads.com/book/show/56465.The_Gift_of_Fear) | 2000 |
|
||||
| Gifts of Imperfection | Brene Brown | [4.18](https://www.goodreads.com/book/show/7015403-the-gifts-of-imperfection) | |
|
||||
| Metamagical Themas: Questing For The Essence Of Mind And Pattern | Douglas Hofstadter | [4.16](https://www.goodreads.com/book/show/181239.Metamagical_Themas) | 1996 |
|
||||
| The Truth About Everything: An Irreverent History of Philosophy : With Illustrations | Matthew Stewart | [4.15](https://www.goodreads.com/book/show/18528861-the-truth-about-everything) | 1997 |
|
||||
| Illusions: The Adventures of a Reluctant Messiah | Richard Bach | [4.15](https://www.goodreads.com/book/show/29946.Illusions) | 1977 |
|
||||
| How to Win Friends and Influence People | Dale Carnegie | [4.14](https://www.goodreads.com/book/show/4865.How_to_Win_Friends_and_Influence_People) | 1998 |
|
||||
| Creative Visualization: Use the Power of Your Imagination to Create What You Want in Your Life | Shakti Gawain | [4.13](https://www.goodreads.com/book/show/582533.Creative_Visualization) | 2002 |
|
||||
| Bulfinch's Mythology | Thomas Bulfinch | [4.13](https://www.goodreads.com/book/show/588147.Bulfinch_s_Mythology) | 1998 |
|
||||
| Ego Is the Enemy | Ryan Holiday | [4.12](https://www.goodreads.com/book/show/27036528-ego-is-the-enemy) | 2016 |
|
||||
| Awaken the Giant Within: How to Take Immediate Control of Your Mental, Emotional, Physical and Financial Destiny! | Anthony Robbins | [4.11](https://www.goodreads.com/book/show/180116.Awaken_the_Giant_Within) | |
|
||||
| Awaken the Giant Within: How to Take Immediate Control of Your Mental, Emotional, Physical and Financial Destiny! | Anthony Robbins | [4.11](https://www.goodreads.com/book/show/180116.Awaken_the_Giant_Within) | 1991 |
|
||||
| The Power of Now: A Guide to Spiritual Enlightenment | Eckhart Tolle | [4.11](https://www.goodreads.com/book/show/6708.The_Power_of_Now) | 1997 |
|
||||
| Tuesdays with Morrie | Mitch Albom | [4.11](https://www.goodreads.com/book/show/6900.Tuesdays_with_Morrie) | 1997 |
|
||||
| The Way of the Monk | Gaur Gopal Das | [4.10](https://www.goodreads.com/book/show/45712959-the-way-of-the-monk) | 2020 |
|
||||
| Predictably Irrational | Dan Ariely | [4.10](https://www.goodreads.com/book/show/1713426.Predictably_Irrational) | 2008 |
|
||||
| Flow: The Psychology of Optimal Experience | Mihaly Csikszentmihalyi | [4.10](https://www.goodreads.com/book/show/66354.Flow) | 1990 |
|
||||
| Thinking, Fast and Slow | Daniel Kahneman | [4.09](https://www.goodreads.com/book/show/11468377-thinking-fast-and-slow) | 2011 |
|
||||
| Irrational Man: A Study in Existential Philosophy | William Barrett | [4.09](https://www.goodreads.com/book/show/83321.Irrational_Man) | |
|
||||
| The Beginning of Infinity: Explanations That Transform the World | David Deutsch | [4.08](https://www.goodreads.com/book/show/10483171-the-beginning-of-infinity) | |
|
||||
| Happy: Why More or Less Everything is Absolutely Fine | Derren Brown | [4.08](https://www.goodreads.com/book/show/30142270-happy) | 2016 |
|
||||
| The Beginning of Infinity: Explanations That Transform the World | David Deutsch | [4.08](https://www.goodreads.com/book/show/10483171-the-beginning-of-infinity) | 2011 |
|
||||
| Metaphors We Live By | George Lakoff, Mark Johnson | [4.08](https://www.goodreads.com/book/show/34459.Metaphors_We_Live_By) | 2003 |
|
||||
| Grit | Angela Duckworth | [4.08](https://www.goodreads.com/book/show/27213329-grit) | 2016 |
|
||||
| In Defense of Food: An Eater's Manifesto | Michael Pollan | [4.07](https://www.goodreads.com/book/show/315425.In_Defense_of_Food) | 2008 |
|
||||
| The Blank Slate: The Modern Denial of Human Nature | Steven Pinker | [4.07](http://www.goodreads.com/book/show/5752.The_Blank_Slate) | 2003 |
|
||||
| The History of Western Philosophy | Bertrand Russell | [4.06](https://www.goodreads.com/book/show/243685.A_History_of_Western_Philosophy) | 2008 |
|
||||
| Moral Tribes: Emotion, Reason, and the Gap Between Us and Them | Joshua Greene | [4.05](https://www.goodreads.com/book/show/17707599-moral-tribes) | 2013 |
|
||||
| Thus Spoke Zarathustra | Friedrich Nietzsche | [4.05](https://www.goodreads.com/book/show/51893.Thus_Spoke_Zarathustra) | 1883 |
|
||||
| The Elephant in the Brain: Hidden Motives in Everyday Life | Kevin Simler, Robin Hanson | [4.05](https://www.goodreads.com/book/show/28820444-the-elephant-in-the-brain) | 2017 |
|
||||
| Quiet: The Power of Introverts in a World That Can't Stop Talking | Susan Cain | [4.04](https://www.goodreads.com/book/show/8520610-quiet) | 2012 |
|
||||
| The Future of the Mind: The Scientific Quest to Understand, Enhance, and Empower the Mind | Michio Kaku | [4.04](https://www.goodreads.com/book/show/17978489-the-future-of-the-mind) | 2014 |
|
||||
| Every Thing Must Go: Metaphysics Naturalized | James Ladyman, Don Ross, et al | [4.04](https://www.goodreads.com/book/show/757403.Every_Thing_Must_Go) | 2007 |
|
||||
| Antifragile: Things That Gain from Disorder (Incerto) | Nassim Nicholas Taleb | [4.04](https://www.goodreads.com/book/show/13530973-antifragile) | 2012 |
|
||||
| Mindset: The new psychology of success | Carol S. Dweck,Ph.D. | [4.04](https://www.goodreads.com/book/show/40745.Mindset) | 2006 |
|
||||
| The Power of Habit: Why We Do What We Do In Life And Business | Charles Duhigg | [4.03](https://www.goodreads.com/book/show/12609433-the-power-of-habit) | 2012 |
|
||||
| The Upside of Irrationality: The Unexpected Benefits of Defying Logic | Dan Ariely | [4.00](https://www.goodreads.com/book/show/7815744-the-upside-of-irrationality) | |
|
||||
| The Upside of Irrationality: The Unexpected Benefits of Defying Logic | Dan Ariely | [4.00](https://www.goodreads.com/book/show/7815744-the-upside-of-irrationality) | 2010 |
|
||||
| Outsmarting IQ: The Emerging Science of Learnable Intelligence | David Perkins | [4.00](https://www.goodreads.com/book/show/1008488.Outsmarting_Iq) | 1995 |
|
||||
| The Art of War | Sun Tzu | [3.95](https://www.goodreads.com/book/show/10534.The_Art_of_War) | 2005 |
|
||||
| Willpower: Rediscovering the Greatest Human Strength | Ron P. Baumeister, John Tierney | [3.95](https://www.goodreads.com/book/show/11104933-willpower) | 2011 |
|
||||
| A Whole New Mind: Why Right-Brainers Will Rule the Future | Daniel H. Pink | [3.95](https://www.goodreads.com/book/show/99315.A_Whole_New_Mind) | |
|
||||
| Vagabonding: An Uncommon Guide to the Art of Long-Term World Travel | Rolf Potts | [3.92](https://www.goodreads.com/book/show/100247.Vagabonding) | |
|
||||
| A Whole New Mind: Why Right-Brainers Will Rule the Future | Daniel H. Pink | [3.95](https://www.goodreads.com/book/show/99315.A_Whole_New_Mind) |2006 |
|
||||
| Vagabonding: An Uncommon Guide to the Art of Long-Term World Travel | Rolf Potts | [3.92](https://www.goodreads.com/book/show/100247.Vagabonding) |2002 |
|
||||
| Supernormal: Science, Yoga, and the Evidence for Extraordinary Psychic Abilities | Dean Radin | [3.91](https://www.goodreads.com/book/show/8694125-alone-together) | 2013 |
|
||||
| Prisoner's Dilemma | William Poundstone | [3.91](https://www.goodreads.com/book/show/29506.Prisoner_s_Dilemma) | 1993 |
|
||||
| The Subtle Art Of Not Giving a F@ck: A Counterintuitive Approach to Living a Good Life | Mark Manson | [3.91](https://www.goodreads.com/book/show/28257707-the-subtle-art-of-not-giving-a-f-ck) | 2017 |
|
||||
| The Stuff of Thought: Language as a Window into Human Nature | Steven Pinker | [3.90](https://www.goodreads.com/book/show/373969.The_Stuff_of_Thought) | 2007 |
|
||||
| Consilience: The Unity of Knowledge | Edward O. Wilson | [3.90](https://www.goodreads.com/book/show/55981.Consilience) | 1999 |
|
||||
| Why We Make Mistakes: How We Look Without Seeing, Forget Things in Seconds, and Are All Pretty Sure We Are Way Above Average | Joseph T. Hallinan | [3.87](https://www.goodreads.com/book/show/5040579-why-we-make-mistakes) | 2009 |
|
||||
| You Just Don't Understand: Women and Men in Conversation | Deborah Tannen | [3.86](https://www.goodreads.com/book/show/147222.You_Just_Don_t_Understand) | 2007 |
|
||||
| Just the Arguments: 100 of the Most Important Arguments in Western Philosophy | Michael Bruce, Steven Barbone | [3.85](https://www.goodreads.com/book/show/12838972-just-the-arguments) | 2011 |
|
||||
| What the Dog Saw: and other adventures | Malcolm Gladwell | [3.82](https://www.goodreads.com/book/show/6516450-what-the-dog-saw-and-other-adventures) | 2009 |
|
||||
| Spent: Sex, Evolution, and Consumer Behavior | Geoffrey Miller | [3.82](https://www.goodreads.com/book/show/6283340-spent) | |
|
||||
| Games People Play: The Basic Handbook of Transactional Analysis | Eric Berne. | [3.81](https://www.goodreads.com/book/show/49176.Games_People_Play) | |
|
||||
| Spent: Sex, Evolution, and Consumer Behavior | Geoffrey Miller | [3.82](https://www.goodreads.com/book/show/6283340-spent) | 2009 |
|
||||
| Games People Play: The Basic Handbook of Transactional Analysis | Eric Berne. | [3.81](https://www.goodreads.com/book/show/49176.Games_People_Play) | 1964 |
|
||||
| This Will Make You Smarter: New Scientific Concepts to Improve Your Thinking | John Brockman | [3.81](https://www.goodreads.com/book/show/13035774-this-will-make-you-smarter) | 2012 |
|
||||
| Intuition Pumps And Other Tools for Thinking | Daniel C. Dennett | [3.80](https://www.goodreads.com/book/show/18378002-intuition-pumps-and-other-tools-for-thinking) | 2014 |
|
||||
| Jonathan Livingston Seagull | Richard Bach | [3.80](https://www.goodreads.com/book/show/71728.Jonathan_Livingston_Seagull) | |
|
||||
| Jonathan Livingston Seagull | Richard Bach | [3.80](https://www.goodreads.com/book/show/71728.Jonathan_Livingston_Seagull) | 1970|
|
||||
| Why Does the World Exist?: An Existential Detective Story | Jim Holt | [3.77](http://www.goodreads.com/book/show/8854815-why-does-the-world-exist) | 2012 |
|
||||
| The Social Contract | Jean-Jacques Rousseau, Maurice Cranston | [3.75](https://www.goodreads.com/book/show/12651.The_Social_Contract) | |
|
||||
| The Social Contract | Jean-Jacques Rousseau, Maurice Cranston | [3.75](https://www.goodreads.com/book/show/12651.The_Social_Contract) | 2009 |
|
||||
| The Ethical Brain: The Science of Our Moral Dilemmas | Michael S. Gazzaniga | [3.70](https://www.goodreads.com/book/show/328734.The_Ethical_Brain) | 2006 |
|
||||
| Why Smart People Can Be So Stupid | Robert J Sternberg | [3.68](https://www.goodreads.com/book/show/300300.Why_Smart_People_Can_Be_So_Stupid) | 2003 |
|
||||
| Alone Together: Why We Expect More from Technology and Less from Each Others | Sherry Turkle | [3.62](http://www.goodreads.com/book/show/8694125-alone-together) | 2011 |
|
||||
| How to Win Every Argument: The Use and Abuse of Logic | Madsen Pirie | [3.55](https://www.goodreads.com/book/show/112731.How_to_Win_Every_Argument) | 2006 |
|
||||
| Rapt: Attention and the Focused Life: Winifred Gallagher | Winifred Gallagher | [3.54](https://www.goodreads.com/book/show/6262510-rapt) | |
|
||||
| Rapt: Attention and the Focused Life: Winifred Gallagher | Winifred Gallagher | [3.54](https://www.goodreads.com/book/show/6262510-rapt) | 2009 |
|
||||
| Utilitarianism | Geoffrey Scarre | [3.50](https://www.goodreads.com/book/show/3807762-utilitarianism) | 1996 |
|
||||
| The Age of Em: Work, Love and Life When Robots Rule the Earth | Robin Hanson | [3.41](https://www.goodreads.com/book/show/26831944-the-age-of-em) | 2016 |
|
||||
| The Fine Art of Small Talk: How To Start a Conversation, Keep It Going, Build Networking Skills -- and Leave a Positive Impression | Debra Fine | [3.36](https://www.goodreads.com/book/show/93409.The_Fine_Art_of_Small_Talk) | 2005 |
|
||||
| Snoop: What Your Stuff Says About You: Sam Gosling | Sam Gosling | [3.33](https://www.goodreads.com/book/show/1581330.Snoop) | |
|
||||
| Gifs of Immperfection | Brene Brown | [](https://www.goodreads.com/book/show/7015403-the-gifts-of-imperfection) | |
|
||||
| Snoop: What Your Stuff Says About You: Sam Gosling | Sam Gosling | [3.33](https://www.goodreads.com/book/show/1581330.Snoop) | 2001 |
|
||||
|
||||
<a href="#top"><img src="https://img.shields.io/badge/Back%20to%20Top-↑-blue"/></a>
|
||||
|
||||
## Autobiographies and Biographies
|
||||
| Name | Author | Goodreads Rating | Year Published |
|
||||
|------|--------|------------------|----------------|
|
||||
| Becoming | Michelle Obama | [4.53](https://www.goodreads.com/book/show/38746485-becoming) | 2018 |
|
||||
| Unbroken: A World War II Story of Survival, Resilience, and Redemption | Laura Hillenbrand | [4.39](https://www.goodreads.com/book/show/8664353-unbroken) | 2010 |
|
||||
| Everything Beautiful in Its Time: Seasons of Love and Loss | Jenna Bush Hager | [4.38](https://www.goodreads.com/book/show/51822870-everything-beautiful-in-its-time) | 2020 |
|
||||
| Long Walk to Freedom | Nelson Mandela | [4.31](http://www.goodreads.com/book/show/318431.Long_Walk_to_Freedom) | 1995 |
|
||||
| My Life and My Work | Henry Ford | [4.29](http://www.goodreads.com/book/show/1122054.My_Life_And_Work) | |
|
||||
| My Life and My Work | Henry Ford | [4.29](http://www.goodreads.com/book/show/1122054.My_Life_And_Work) | 1922 |
|
||||
| Surely You're Joking, Mr. Feynman!: Adventures of a Curious Character | Richard Feynman | [4.29](https://www.goodreads.com/book/show/5544.Surely_You_re_Joking_Mr_Feynman_) | 1997 |
|
||||
| The Autobiography of Malcolm X | Malcolm X, Alex Haley | [4.29](http://www.goodreads.com/book/show/92057.The_Autobiography_of_Malcolm_X) | |
|
||||
| The Autobiography of Malcolm X | Malcolm X, Alex Haley | [4.29](http://www.goodreads.com/book/show/92057.The_Autobiography_of_Malcolm_X) |1965 |
|
||||
| The Third Door:The Wild Quest to Uncover How the World's Most Successful People Launched Their Careers| Alex banayan|[4.28](https://www.goodreads.com/book/show/36739769-the-third-door) | 2018 |
|
||||
| Elon Musk: Inventing the Future | Ashlee Vance | [4.25](https://www.goodreads.com/book/show/22543496-elon-musk) | 2015 |
|
||||
| The Last Lecture | Randy Pausch | [4.25](http://www.goodreads.com/book/show/2318271.The_Last_Lecture) | 2008 |
|
||||
| Freedom in Exile | Dalai Lama XIV | [4.24](http://www.goodreads.com/book/show/567720.Freedom_in_Exile) | 1991 |
|
||||
| Madame Curie: A Biography | Marie Curie | [4.22](https://www.goodreads.com/book/show/341166.Madame_Curie) | 2001 |
|
||||
| Autobiography of a Yogi | Paramahansa Yogananda | [4.21](https://www.goodreads.com/book/show/639864.Autobiography_of_a_Yogi) | 1946 |
|
||||
| Wings of Fire | A.P.J. Abdul Kalam | [4.20](http://www.goodreads.com/book/show/634583.Wings_of_Fire) | 2011 |
|
||||
| Man Without Fear | Rajat Gupta | [4.20](https://www.goodreads.com/en/book/show/44334846-mind-without-fear) | 2019 |
|
||||
| The Man Who Knew Infinity : A Life of the Genius Ramanujan | Robert Kanigel | [4.15](https://www.goodreads.com/book/show/106139.The_Man_Who_Knew_Infinity) | 1991 |
|
||||
| An Astronaut's Guide to Life on Earth | Chris Hadfield | [4.14](https://www.goodreads.com/book/show/18170143-an-astronaut-s-guide-to-life-on-earth) | 2013 |
|
||||
| The Diary of a Young Girl | Anne Frank | [4.10](http://www.goodreads.com/book/show/48855.The_Diary_of_a_Young_Girl) | 1993 |
|
||||
| The Innovators: How a Group of Hackers, Geniuses and Geeks Created the Digital Revolution | Walter Isaacson | [4.10](https://www.goodreads.com/book/show/21856367-the-innovators) | 2014 |
|
||||
| A Sense of the World | Jason Roberts | [4.10](https://www.goodreads.com/book/show/126049.A_Sense_of_the_World?from_search=true&from_srp=true&qid=L2EvsarKWR&rank=1) | 2005 |
|
||||
| Einstein: His Life and Universe | Walter Isaacson | [4.09](https://www.goodreads.com/book/show/10884.Einstein) | 2007 |
|
||||
| Steve Jobs | Walter Issacson | [4.09](http://www.goodreads.com/book/show/11084145-steve-jobs) | 2011 |
|
||||
| My Experiments with Truth | Mahatma Gandhi | [4.07](http://www.goodreads.com/book/show/112803.The_Story_of_My_Experiments_With_Truth) | 1993 |
|
||||
| The Story of My Life | Helen Keller | [4.07](http://www.goodreads.com/book/show/821611.The_Story_of_My_Life) | 1990 |
|
||||
| The Immortal Life of Henrietta Lacks | Rebecca Skloot | [4.05](https://www.goodreads.com/book/show/6493208-the-immortal-life-of-henrietta-lacks?ac=1&from_search=true) | 2010 |
|
||||
| Losing My Virginity: The Autobiography | Richard Branson | [3.97](https://www.goodreads.com/book/show/9533705-losing-my-virginity) |1999|
|
||||
| My Inventions: The Autobiography of Nikola Tesla | Nikola Tesla | [3.96](https://www.goodreads.com/book/show/493.My_Inventions?ac=1&from_search=true&qid=PQw29iDQp5&rank=1) | 2006 |
|
||||
| Ghost in the Wires: My Adventures as the World's Most Wanted Hacker | Kevin Mitnick | [3.95](http://www.goodreads.com/book/show/10256723-ghost-in-the-wires) | 2011 |
|
||||
| An Autobiography: Toward Freedom | Jawaharlal Nehru | [3.85](http://www.goodreads.com/book/show/322939.An_Autobiography) | 1989 |
|
||||
| iWoz: Computer Geek to Cult Icon: How I Invented the Personal Computer, Co-Founded Apple, and Had Fun Doing It | Steve Wozniak | [3.82](http://www.goodreads.com/book/show/798635.iWoz) | 2007 |
|
||||
|
||||
<a href="#top"><img src="https://img.shields.io/badge/Back%20to%20Top-↑-blue"/></a>
|
||||
|
||||
## History
|
||||
| Name | Author | Goodreads Rating | Year Published |
|
||||
|------|--------|------------------|----------------|
|
||||
| Sapiens: A Brief History of Humankind | Yuval Noah Harari | [4.42](https://www.goodreads.com/book/show/23692271-sapiens) | 2014 |
|
||||
| Bloodlands: Europe Between Hitler and Stalin | Timothy Snyder | [4.36](https://www.goodreads.com/book/show/6572270-bloodlands) | 2010 |
|
||||
| How the Internet Happened: From Netscape to the iPhone | Brian McCullough | [4.36](https://www.goodreads.com/en/book/show/38212134-how-the-internet-happened) | 2018 |
|
||||
| The Discoverers | Daniel J. Boorstin | [4.34](https://www.goodreads.com/book/show/714380.The_Discoverers) | 2012 |
|
||||
| Homo Deus: A History of Tomorrow | Yuval Noah Harari | [4.27](https://www.goodreads.com/book/show/31138556-homo-deus) | 2017 |
|
||||
| One Minute to Midnight: Kennedy, Khrushchev, and Castro on the Brink of Nuclear War | Michael Dobbs | [4.20](https://www.goodreads.com/book/show/2606779-one-minute-to-midnight) | 2008 |
|
||||
| The Codebreakers: The Comprehensive History of Secret Communication from Ancient Times to the Internet | David Kahn | [4.18](https://www.goodreads.com/book/show/29608.The_Codebreakers) | 1996 |
|
||||
| Blindness | José Saramago | [4.13](https://www.goodreads.com/book/show/2526.Blindness) | 1995 |
|
||||
| From Dawn to Decadence: 500 Years of Western Cultural Life 1500 to the Present | Jacques Barzun | [4.12](https://www.goodreads.com/book/show/58233.From_Dawn_to_Decadence) | 2001 |
|
||||
| Why the West Rules--for Now: The Patterns of History, and What They Reveal About the Future | Ian Morrisage | [4.09](https://www.goodreads.com/book/show/9491855-why-the-west-rules-for-now) | 2010 |
|
||||
| The Soul of a New Machine | Tracy Kidder | [4.12](https://www.goodreads.com/book/show/7090.The_Soul_of_a_New_Machine) | 1981 |
|
||||
| Why the West Rules--for Now: The Patterns of History, and What They Reveal About the Future | Ian Morris | [4.09](https://www.goodreads.com/book/show/9491855-why-the-west-rules-for-now) | 2010 |
|
||||
| The Nazi Doctors: Medical Killing and the Psychology of Genocide | Robert Jay Lifton | [4.07](https://www.goodreads.com/book/show/173187.The_Nazi_Doctors) | 1986 |
|
||||
| God Created The Integers: The Mathematical Breakthroughs that Changed History | Stephen Hawking | [4.06](https://www.goodreads.com/book/show/2096.God_Created_The_Integers) | |
|
||||
| Churchill's Secret War: The British Empire and the Ravaging of India during World War II | Madhusree Mukerjee | [4.05](https://www.goodreads.com/book/show/8890989-churchill-s-secret-war) | 2010 |
|
||||
| El Tiempo Entre Costuras | María Dueñas | [4.04](https://www.goodreads.com/book/show/7502166-el-tiempo-entre-costuras) |2009 |
|
||||
| Guns, Germs, And Steel : The Fates Of Human Societies | Jared M. Diamond | [4.00](https://www.goodreads.com/book/show/1842.Guns_Germs_and_Steel) | 2005 |
|
||||
| Discovery of India | Jawaharlal Nehru | [3.98](http://www.goodreads.com/book/show/154126.The_Discovery_of_India) | |
|
||||
| Discovery of India | Jawaharlal Nehru | [3.98](http://www.goodreads.com/book/show/154126.The_Discovery_of_India) | 1946 |
|
||||
| The Rational Optimist: How Prosperity Evolves (P.S.) | Matt Ridley | [3.98](https://www.goodreads.com/book/show/7776209-the-rational-optimist) | 2010 |
|
||||
| Kingpin: How One Hacker Took Over the Billion-Dollar Cybercrime Underground | Kevin Poulson | [3.96](http://www.goodreads.com/book/show/9319468-kingpin) | 2011 |
|
||||
| The Ghost Map: The Story of London's Most Terrifying Epidemic--and How It Changed Science, Cities, and the Modern World | Steven Johnson | [3.91](https://www.goodreads.com/book/show/36086.The_Ghost_Map) | |
|
||||
| The Ghost Map: The Story of London's Most Terrifying Epidemic--and How It Changed Science, Cities, and the Modern World | Steven Johnson | [3.91](https://www.goodreads.com/book/show/36086.The_Ghost_Map) |2006 |
|
||||
| The Rise and Fall of the British Empire | Lawrence James | [3.89](https://www.goodreads.com/book/show/143980.The_Rise_and_Fall_of_the_British_Empire) | 1997 |
|
||||
| The Master Switch: The Rise and Fall of Information Empires | Tim Wu | [3.89](https://www.goodreads.com/book/show/8201080-the-master-switch) | 2010 |
|
||||
| Spycraft | Robert Wallace, H. Keith Melton, Henry R. Schlesinger | [3.81](http://www.goodreads.com/book/show/971936.Spycraft) | |
|
||||
| Spycraft | Robert Wallace, H. Keith Melton, Henry R. Schlesinger | [3.81](http://www.goodreads.com/book/show/971936.Spycraft) |1987 |
|
||||
| Civilization: The West and the Rest: Niall Ferguson | Niall Ferguson | [3.78](https://www.goodreads.com/book/show/10475421-civilization) | 2011 |
|
||||
| The UNIX-HATERS Handbook | Simson Garfinkel, Daniel Weise, Steven Strassmann | [3.78](https://www.goodreads.com/book/show/174904.The_UNIX_Hater_s_Handbook) | 1994 |
|
||||
| The Revenge of Geography: What the Map Tells Us About Coming Conflicts and the Battle Against Fate | Robert D. Kaplan | [3.68](https://www.goodreads.com/book/show/13330422-the-revenge-of-geography) | 2012 |
|
||||
| The World Is Flat: A Brief History of the Twenty-first Century | Thomas L. Friedman | [3.66](https://www.goodreads.com/book/show/1911.The_World_Is_Flat) | 2006 |
|
||||
|
||||
<a href="#top"><img src="https://img.shields.io/badge/Back%20to%20Top-↑-blue"/></a>
|
||||
|
||||
## Science and Medicine
|
||||
| Name | Author | Goodreads Rating | Year Published |
|
||||
|------|--------|------------------|----------------|
|
||||
| Behave: The Biology of Humans at Our Best and Worst | Robert M. Sapolsky | [4.42](https://www.goodreads.com/book/show/31170723-behave) | 2017 |
|
||||
| Asimov's New Guide to Science | Isaac Asimov | [4.36](https://www.goodreads.com/book/show/977262.Asimov_s_New_Guide_To_Science) | 1985 |
|
||||
| Factfulness: Ten Reasons We're Wrong About the World – and Why Things Are Better Than You Think | Hans Rosling | [4.36](https://www.goodreads.com/book/show/34890015-factfulness) | 2018 |
|
||||
| The Gene: An Intimate History | Siddhartha Mukherjee | [4.35](https://www.goodreads.com/book/show/27276428-the-gene) | 2016 |
|
||||
| Origins of Form: The Shape of Natural and Man-Made Things | Christopher Williams | [4.31](https://www.goodreads.com/book/show/16255011-origins-of-form) | 2013 |
|
||||
| The Body: A Guide for Occupants | Bill Bryson | [4.31](https://www.goodreads.com/book/show/43582376-the-body) | 2019 |
|
||||
| Gödel, Escher, Bach: An Eternal Golden Braid | Douglas R. Hofstadter | [4.30](https://www.goodreads.com/book/show/24113.G_del_Escher_Bach) | 1979 |
|
||||
| The Little Schemer | Daniel P. Friedman, Matthias Felleisen, Duane Bibby, Gerald J. Sussman | [4.27](https://www.goodreads.com/book/show/548914.The_Little_Schemer) | 1995 |
|
||||
| Scientific Genius: A Psychology of Science | Dean Keith Simonton | [4.25](https://www.goodreads.com/book/show/1752295.Scientific_Genius) | 1988 |
|
||||
| Out of Control: The New Biology of Machines, Social Systems, and the Economic World | Kevin Kelly | [4.24](https://www.goodreads.com/book/show/16080353-out-of-control) | 1995 |
|
||||
| The Brain: The Story of You | David Eagleman | [4.20](https://www.goodreads.com/book/show/25776132.the-brain) | 2015 |
|
||||
| A Short History of Nearly Everything | Bill Bryson | [4.19](https://www.goodreads.com/book/show/21.A_Short_History_of_Nearly_Everything) | |
|
||||
| A Short History of Nearly Everything | Bill Bryson | [4.19](https://www.goodreads.com/book/show/21.A_Short_History_of_Nearly_Everything) |2003 |
|
||||
| Things to Make and Do in the Fourth Dimension | Matt Parker | [4.19](https://www.goodreads.com/en/book/show/21805670-things-to-make-and-do-in-the-fourth-dimension) | 2014 |
|
||||
| The Symbolic Species: The Co-evolution of Language and the Brain | Terrence W. Deacon | [4.17](https://www.goodreads.com/book/show/733691.The_Symbolic_Species) | 1998 |
|
||||
| A Brief History of Time | Stephen Hawking | [4.12](https://www.goodreads.com/book/show/3869.A_Brief_History_of_Time) | 1998 |
|
||||
| The Selfish Gene | Richard Dawkins | [4.11](http://www.goodreads.com/book/show/61535.The_Selfish_Gene) | |
|
||||
| The Selfish Gene | Richard Dawkins | [4.11](http://www.goodreads.com/book/show/61535.The_Selfish_Gene) |1976 |
|
||||
| Figments of Reality: The Evolution of the Curious Mind | Ian Stewart, Jack Cohen | [4.11](https://www.goodreads.com/book/show/164560.Figments_of_Reality) | 2009 |
|
||||
| The New Executive Brain: Frontal Lobes in a Complex World | Elkhonon Goldberg | [4.07](https://www.goodreads.com/book/show/6745893-the-new-executive-brain) | |
|
||||
| The Extended Phenotype: The Long Reach of the Gene | Richard Dawkins | [4.07](https://www.goodreads.com/book/show/61538.The_Extended_Phenotype) | 1999 |
|
||||
| Rare Earth: Why Complex Life is Uncommon in the Universe | Peter D. Ward, Donald Brownlee | [4.06](https://www.goodreads.com/book/show/88552.Rare_Earth) | 2003 |
|
||||
| Stiff: The Curious Lives of Human Cadavers | Mary Roach | [4.05](https://www.goodreads.com/book/show/32145.Stiff) | 2004 |
|
||||
| Darwin's Dangerous Idea | Daniel C. Dennett | [4.03](https://www.goodreads.com/book/show/2068.Darwin_s_Dangerous_Idea) | |
|
||||
| The Man Who Mistook His Wife for A Hat and Other Clinical Tales | Oliver Sacks | [4.05](https://www.goodreads.com/book/show/63697.The_Man_Who_Mistook_His_Wife_for_a_Hat_and_Other_Clinical_Tales) | 1998 |
|
||||
| Darwin's Dangerous Idea | Daniel C. Dennett | [4.03](https://www.goodreads.com/book/show/2068.Darwin_s_Dangerous_Idea) |1995 |
|
||||
| The Inevitable: Understanding the 12 Technological Forces That Will Shape Our Future | Kevin Kelly | [4.02](https://www.goodreads.com/book/show/27209431-the-inevitable) | 2016 |
|
||||
| The Outer Limits of Reason: What Science, Mathematics, and Logic Cannot Tell Us | Noson S. Yanofsky | [4.00](http://www.goodreads.com/book/show/17841838-the-outer-limits-of-reason) | 2013 |
|
||||
| The Structure of Scientific Revolutions: 50th Anniversary Edition | Thomas S. Kuhn | [3.99](https://www.goodreads.com/book/show/61539.The_Structure_of_Scientific_Revolutions) | 1996 |
|
||||
| At Home in the Universe: The Search for the Laws of Self-Organization and Complexity | Stuart Kauffman | [3.97](https://www.goodreads.com/book/show/319006.At_Home_in_the_Universe) | 1996 |
|
||||
| The Wealth of Networks: How Social Production Transforms Markets and Freedom | Yochai Benkler | [3.95](https://www.goodreads.com/book/show/14721.The_Wealth_of_Networks) | 2006 |
|
||||
| Mind Children: The Future of Robot and Human Intelligence | Hans Moravec. | [3.95](https://www.goodreads.com/book/show/648195.Mind_Children) | 1990 |
|
||||
| How to Find a Habitable Planet | James kasting | [3.93](https://www.goodreads.com/book/show/7551498-how-to-find-a-habitable-planet) | 2010 |
|
||||
| The 10,000 Year Explosion: How Civilization Accelerated Human Evolution | Gregory Cochran, Henry Harpending | [3.91](https://www.goodreads.com/book/show/6033964-the-10-000-year-explosion) | |
|
||||
| Profiles of the Future: An Inquiry into the Limits of the Possible | Arthur C. Clarke | [3.94](https://www.goodreads.com/book/show/169258.Profiles_of_the_Future) | 1962 |
|
||||
| How to Find a Habitable Planet | James Kasting | [3.93](https://www.goodreads.com/book/show/7551498-how-to-find-a-habitable-planet) | 2010 |
|
||||
| The 10,000 Year Explosion: How Civilization Accelerated Human Evolution | Gregory Cochran, Henry Harpending | [3.91](https://www.goodreads.com/book/show/6033964-the-10-000-year-explosion) | 2009 |
|
||||
| The Disappearing Spoon: And Other True Tales of Madness, Love, and the History of the World from the Periodic Table of the Elements | Sam Kean | [3.91](https://www.goodreads.com/book/show/7247854-the-disappearing-spoon) | 2010 |
|
||||
| Evolution for Everyone: How Darwin's Theory Can Change the Way We Think About Our Lives | David Sloan Wilson | [3.90](http://www.goodreads.com/book/show/159062.Evolution_for_Everyone) | 2007 |
|
||||
| Life at the Speed of Light: From the Double Helix to the Dawn of Digital Life | J. Craig Venter | [3.87](www.goodreads.com/book/show/17674969-life-at-the-speed-of-light) | 2013 |
|
||||
| The Shallows: What the Internet is Doing to Our Brains | Nicholas Carr | [3.85](https://www.goodreads.com/book/show/9778945-the-shallows) | 2011 |
|
||||
| Catching Fire: How Cooking Made Us Human | Richard Wrangham | [3.83](https://www.goodreads.com/book/show/11148989-catching-fire) | 2009 |
|
||||
| Heaven in a Chip: Fuzzy Visions of Society and Science in the Digital Age | Bart Kosko | [3.82](https://www.goodreads.com/book/show/172645.Heaven_in_a_Chip) | 2000 |
|
||||
| The Quark and the Jaguar: Adventures in the Simple and the Complex | Murray Gell-Mann | [3.81](https://www.goodreads.com/book/show/270881.The_Quark_and_the_Jaguar) | |
|
||||
| The Quark and the Jaguar: Adventures in the Simple and the Complex | Murray Gell-Mann | [3.81](https://www.goodreads.com/book/show/270881.The_Quark_and_the_Jaguar) |1994 |
|
||||
| Tomorrowland: Our Staggering Journey from Science Fiction to Science Fact | Steven Kotler | [3.80](http://www.goodreads.com/book/show/25060233-tomorrowland) | 2015 |
|
||||
| Origins of Genius: Darwinian Perspectives on Creativity | Dean Keith | [3.74](https://www.goodreads.com/book/show/254489.Origins_of_Genius) | 1999 |
|
||||
| Waters of the World: the story of the scientists who unravelled the mysteries of our seas, glaciers, and atmosphere and made the planet whole | Sarah Dry | [3.65](https://www.goodreads.com/book/show/43389003-waters-of-the-world) | 2019 |
|
||||
| Mind Wars: Brain Research and National Defense | Jonathan D. Moreno | [3.45](http://www.goodreads.com/book/show/599321.Mind_Wars) | 2007 |
|
||||
|
||||
<a href="#top"><img src="https://img.shields.io/badge/Back%20to%20Top-↑-blue"/></a>
|
||||
|
||||
## Logic and Problem Solving
|
||||
| Name | Author | Goodreads Rating | Year Published |
|
||||
|------|--------|------------------|----------------|
|
||||
| What Is the Name of This Book?: The Riddle of Dracula and Other Logical Puzzles | Raymond M. Smullyan | [4.24](https://www.goodreads.com/book/show/493576.What_Is_the_Name_of_This_Book_) | 2011 |
|
||||
| A Mind for Numbers: How to Excel at Math and Science even If You Flunked Algebra | Barbara Oakley | [4.22](http://www.goodreads.com/book/show/18693655-a-mind-for-numbers) | 2014 |
|
||||
| How to Solve It: A New Aspect of Mathematical Method | George Polya | [4.16](https://www.goodreads.com/book/show/192221.How_to_Solve_It) | 2015 |
|
||||
| Guide to Competitive Programming: Learning and Improving Algorithms Through Contests | Antti Laaksonen | [4.15]( https://www.goodreads.com/book/show/36881945-guide-to-competitive-programming) | 2016 |
|
||||
| Superforecasting: The Art and Science of Prediction | Philip E. Tetlock, Dan Gardner | [4.10](https://www.goodreads.com/book/show/23995360-superforecasting) | 2015 |
|
||||
| Problem Solving 101: A Simple Book | Ken Watanabe | [4.10](https://www.goodreads.com/book/show/6271219-problem-solving-101) | 2009 |
|
||||
| Labyrinths of Reason: Paradox, Puzzles, and the Frailty of Knowledge | William Poundstone | [4.05](https://www.goodreads.com/book/show/55436.Labyrinths_of_Reason) | 1989 |
|
||||
| Mazes for the Mind: Computers and the Unexpected | Clifford A. Pickover | [4.05](https://www.goodreads.com/book/show/1986400.Mazes_for_the_Mind) | 1992 |
|
||||
| Outnumbered: Exploring the Algorithms That Control Our Lives | David Sumpter | [3.99](https://www.goodreads.com/book/show/36762542-outnumbered) | 2018 |
|
||||
| Thinking Forth: A Language and Philosophy for Solving Problems | Leo Brodie | [3.96](https://www.goodreads.com/book/show/2995657-thinking-forth) | 1984 |
|
||||
|
||||
<a href="#top"><img src="https://img.shields.io/badge/Back%20to%20Top-↑-blue"/></a>
|
||||
|
||||
## Politics
|
||||
| Name | Author | Goodreads Rating | Year Published |
|
||||
|------|--------|------------------|----------------|
|
||||
| The New Jim Crow: Mass Incarceration in the Age of Colorblindness | Michelle Alexander | [4.49](https://www.goodreads.com/book/show/6792458-the-new-jim-crow)| 2010
|
||||
| Justice: What's the Right Thing to Do? | Michael J. Sandel | [4.25](https://www.goodreads.com/book/show/6452731-justice) | |
|
||||
| On Tyranny: Twenty Lessons from the Twentieth Century | Timothy Snyder | [4.20](https://www.goodreads.com/book/show/33917107-on-tyranny) | 2017 |
|
||||
| The Righteous Mind: Why Good People are Divided by Politics and Religion | Jonathan Haidt | [4.16](https://www.goodreads.com/book/show/11324722-the-righteous-mind) | 2012 |
|
||||
| Strangers in Their Own Land: Anger and Mourning on the American Right | Arlie Russell Hochschild | [4.15](https://www.goodreads.com/book/show/28695425-strangers-in-their-own-land) | 2016 |
|
||||
| Game Change: Obama and the Clintons, McCain and Palin, and the Race of a Lifetime | John Heilemann, Mark Halperin | [4.10](https://www.goodreads.com/book/show/6694937-game-change) | 2010 |
|
||||
| Bolo'bolo | P.M. | [4.05](https://www.goodreads.com/book/show/12395170-bolo-bolo) | 1984 |
|
||||
| The Myth of the Rational Voter: Why Democracies Choose Bad Policies | Bryan Caplan | [3.96](https://www.goodreads.com/book/show/698866.The_Myth_of_the_Rational_Voter) | 2007 |
|
||||
| Resource Wars: The New Landscape of Global Conflict | Michael Klare | [3.73](https://www.goodreads.com/book/show/149206.Resource_Wars) | |
|
||||
| The Art of Deception: Controlling the Human Element of Security | Kevin D. Mitnick | [3.76](https://www.goodreads.com/book/show/18160.The_Art_of_Deception) | 2003 |
|
||||
| Resource Wars: The New Landscape of Global Conflict | Michael Klare | [3.73](https://www.goodreads.com/book/show/149206.Resource_Wars) |2001 |
|
||||
| The Audacity of Hope: Thoughts on Reclaiming the American Dream | Barack Obama | [3.70](https://www.goodreads.com/book/show/9742.The_Audacity_of_Hope) | 2006 |
|
||||
|
||||
<a href="#top"><img src="https://img.shields.io/badge/Back%20to%20Top-↑-blue"/></a>
|
||||
|
||||
## Economics
|
||||
| Name | Author | Goodreads Rating | Year Published |
|
||||
|------|--------|------------------|----------------|
|
||||
| The Simple Path to Wealth: Your road map to financial independence and a rich, free life | J.L. Collins | [4.47](https://www.goodreads.com/book/show/30646587-the-simple-path-to-wealth) | 2016 |
|
||||
| Origin of Wealth | Eric D. Beinhocker | [4.23](https://www.goodreads.com/book/show/22456.The_Origin_of_Wealth) | 2006 |
|
||||
| Every Shot Counts: Using the Revolutionary Strokes Gained Approach to Improve Your Golf Performance and Strategy | Mark Broadie | [4.23](https://www.goodreads.com/book/show/17674971-every-shot-counts) | 2014 |
|
||||
| Economic Facts and Fallacies | Thomas Sowell | [4.18](https://www.goodreads.com/book/show/2064279.Economic_Facts_and_Fallacies) | 2008 |
|
||||
| Debt - Updated and Expanded: The First 5,000 Years | David Graeber | [4.17](https://www.goodreads.com/book/show/6617037-debt) | 2011 |
|
||||
| Capital in the Twenty-First Century | Thomas Piketty | [4.01](http://www.goodreads.com/book/show/18736925-capital-in-the-twenty-first-century) | 2014 |
|
||||
| 23 Things They Don't Tell You About Capitalism | Ha-Joon Chang | [3.97](http://www.goodreads.com/book/show/8913542-23-things-they-don-t-tell-you-about-capitalism) | |
|
||||
| The Signal and the Noise: Why So Many Predictions Fail--but Some Don't | Nate Silver | [3.96](https://www.goodreads.com/book/show/13588394-the-signal-and-the-noise) | |
|
||||
| Freakonomics: A Rogue Economist Explores the Hidden Side of Everything | Steven D. Levitt, Stephen J. Dubner | [3.98](https://www.goodreads.com/book/show/1202.Freakonomics) | 2006 |
|
||||
| 23 Things They Don't Tell You About Capitalism | Ha-Joon Chang | [3.97](http://www.goodreads.com/book/show/8913542-23-things-they-don-t-tell-you-about-capitalism) | 2010 |
|
||||
| The Signal and the Noise: Why So Many Predictions Fail--but Some Don't | Nate Silver | [3.96](https://www.goodreads.com/book/show/13588394-the-signal-and-the-noise) | 2012 |
|
||||
| Currency Wars: The Making of the Next Global Crisis | James Rickards | [3.96](https://www.goodreads.com/book/show/11515298-currency-wars) | 2011 |
|
||||
| The Ascent of Money: A Financial History of the World | Niall Ferguson | [3.88](https://www.goodreads.com/book/show/2714607-the-ascent-of-money) | |
|
||||
| The Ascent of Money: A Financial History of the World | Niall Ferguson | [3.88](https://www.goodreads.com/book/show/2714607-the-ascent-of-money) |2008 |
|
||||
| The Bottom Billion: Why the Poorest Countries are Failing and What Can Be Done About It | Paul Collier | [3.85](https://www.goodreads.com/book/show/493371.The_Bottom_Billion) | 2007 |
|
||||
| The Thank You Economy | Gary Vaynerchuk | [3.83](https://www.goodreads.com/book/show/9203287-the-thank-you-economy) | 2011 |
|
||||
| Super Crunchers: Why Thinking-By-Numbers is the New Way To Be Smart | Ian Ayres | [3.70](https://www.goodreads.com/book/show/1081413.Super_Crunchers) | |
|
||||
| Super Crunchers: Why Thinking-By-Numbers is the New Way To Be Smart | Ian Ayres | [3.70](https://www.goodreads.com/book/show/1081413.Super_Crunchers) | 2007 |
|
||||
| A Farewell to Alms : A Brief Economic History of the World | Gregory Clark | [3.67](https://www.goodreads.com/book/show/150437.A_Farewell_to_Alms) | 2007 |
|
||||
|
||||
<a href="#top"><img src="https://img.shields.io/badge/Back%20to%20Top-↑-blue"/></a>
|
||||
|
||||
## Gender
|
||||
| Name | Author | Goodreads Rating | Year Published |
|
||||
|------|--------|------------------|----------------|
|
||||
| Cemetary Boys | Aiden Thomas | [4.48](https://www.goodreads.com/book/show/52339313-cemetery-boys) | 2020
|
||||
| Delusions of Gender: How Our Minds, Society, and Neurosexism Create Difference | Cordelia Fine | [4.15](https://www.goodreads.com/book/show/8031168-delusions-of-gender) | 2010
|
||||
| Paul Takes the Form of a Mortal Girl | Andrea Lawlor | [4.00](https://www.goodreads.com/book/show/35838277-paul-takes-the-form-of-a-mortal-girl) | 2017
|
||||
| Becoming A Man | P. Carl | [3.95](https://www.goodreads.com/book/show/50091840-becoming-a-man) | 2020
|
||||
|
||||
<a href="#top"><img src="https://img.shields.io/badge/Back%20to%20Top-↑-blue"/></a>
|
||||
|
||||
## Sexuality
|
||||
| Name | Author | Goodreads Rating | Year Published |
|
||||
|------|--------|------------------|----------------|
|
||||
@@ -281,27 +401,45 @@
|
||||
| The Ethical Slut: A Guide to Infinite Sexual Possibilities | Dossie Easton, Catherine A. Liszt. | [3.83](http://www.goodreads.com/book/show/54944.The_Ethical_Slut?from_search=true) | 2004 |
|
||||
| The Sex Myth | Brooke Magnanti | [3.50](https://www.goodreads.com/book/show/13569582-the-sex-myth) | 2015 |
|
||||
|
||||
<a href="#top"><img src="https://img.shields.io/badge/Back%20to%20Top-↑-blue"/></a>
|
||||
|
||||
## Race
|
||||
| Name | Author | Goodreads Rating | Year Published |
|
||||
|------|--------|------------------|----------------|
|
||||
| So You Want to Talk About Race | Ijeoma Oluo | [4.53](https://www.goodreads.com/book/show/35099718-so-you-want-to-talk-about-race) | 2018 |
|
||||
| The Origin of Others | Toni Morrison | [4.22](https://www.goodreads.com/book/show/34758228-the-origin-of-others) | 2017 |
|
||||
|
||||
<a href="#top"><img src="https://img.shields.io/badge/Back%20to%20Top-↑-blue"/></a>
|
||||
|
||||
## Education
|
||||
| Name | Author | Goodreads Rating | Year Published |
|
||||
|------|--------|------------------|----------------|
|
||||
| Educated: A Memoir | Tara Westover| [4.47](https://www.goodreads.com/book/show/35133922-educated) | 2018 |
|
||||
| Mindstorms: Children, Computers, And Powerful Ideas | Seymour A. Papert | [4.32](https://www.goodreads.com/book/show/703532.Mindstorms) | 1993 |
|
||||
| The Little Prince | Antoine de Saint-Exupéry | [4.31](https://www.goodreads.com/book/show/71091.Il_piccolo_principe) | 1943 |
|
||||
| How Children Fail | John Holt | [4.22](https://www.goodreads.com/book/show/573009.How_Children_Fail) | 1995 |
|
||||
| Deep Work: Rules for Focused Success in a Distracted World | Cal Newport | [4.20](https://www.goodreads.com/book/show/25744928-deep-work) | 2016 |
|
||||
| Make It Stick: The Science of Successful Learning | Peter C. Brown, Henry L. Roediger III, Mark A. McDaniel | [4.20](https://www.goodreads.com/book/show/18770267.make-it-stick) | 2014 |
|
||||
| Teaching as a Subversive Activity | Neil Postman, Charles Weingartner | [4.19](https://www.goodreads.com/book/show/79681.Teaching_as_a_Subversive_Activity) | 1971 |
|
||||
| Limitless: Upgrade Your Brain, Learn Anything Faster, and Unlock Your Exceptional Life | Jim Kwik | [4.09](https://www.goodreads.com/book/show/49994260-limitless?from_search=true&from_srp=true&qid=pbeSkuESjB&rank=1) | 2020 |
|
||||
| Summerhill School: A New View of Childhood | A. S. Neill, Albert Lamb | [4.09](https://www.goodreads.com/book/show/178734.Summerhill) | 1995 |
|
||||
| The Art of Learning: An Inner Journey to Optimal Performance | Josh Waitzkin | [4.08](https://www.goodreads.com/book/show/857333.The_Art_of_Learning) | 2016 |
|
||||
| Wounded by School: Recapturing the Joy in Learning and Standing Up to Old School Culture | Kirsten Olson, Sara Lawrence-Lightfoot, Parker J. Palmer | [3.92](https://www.goodreads.com/book/show/6425208-wounded-by-school) | 2009 |
|
||||
| Curious Minds: How a Child Becomes a Scientist | John Brockman | [3.72](https://www.goodreads.com/book/show/409588.Curious_Minds) | 2005 |
|
||||
|
||||
<a href="#top"><img src="https://img.shields.io/badge/Back%20to%20Top-↑-blue"/></a>
|
||||
|
||||
## Writing
|
||||
| Name | Author | Goodreads Rating | Year Published |
|
||||
|------|--------|------------------|----------------|
|
||||
| Hat Box: The Collected Lyrics of Stephen Sondheim | Stephen Sondheim | [4.77](https://www.goodreads.com/book/show/12909101-hat-box) | |
|
||||
| Hat Box: The Collected Lyrics | Stephen Sondheim | [4.77](https://www.goodreads.com/book/show/12909101-hat-box) | |
|
||||
| On Writing: A Memoir of the Craft | Stephen King | [4.31](https://www.goodreads.com/book/show/10569.On_Writing) | 2002 |
|
||||
| Bird by Bird: Some Instructions on Writing and Life | Anne Lamott | [4.23](https://www.goodreads.com/book/show/12543.Bird_by_Bird) | 1995 |
|
||||
| Clear and Simple as the Truth | Francis-Noël Thomas, Mark Turner | [4.06](https://www.goodreads.com/book/show/120549.Clear_and_Simple_as_the_Truth) | 1996 |
|
||||
| The Sense of Style: The Thinking Person's Guide to Writing in the 21st Century | Steven Pinker | [4.03](http://www.goodreads.com/book/show/20821371-the-sense-of-style) | 2014 |
|
||||
|
||||
<a href="#top"><img src="https://img.shields.io/badge/Back%20to%20Top-↑-blue"/></a>
|
||||
|
||||
## Theater and Film
|
||||
| Name | Author | Goodreads Rating | Year Published |
|
||||
|------|--------|------------------|----------------|
|
||||
@@ -313,6 +451,8 @@
|
||||
| How to Stop Acting | Harold Guskin | [4.17](https://www.goodreads.com/book/show/808735.How_to_Stop_Acting) | 2003 |
|
||||
| A Practical Handbook for the Actor | Melissa Bruder, Lee Michael Cohn, Madeleine Olnek, Nathaniel Pollack, Robert Previtio, Scott Zigler, David Mamet | [3.87](https://www.goodreads.com/book/show/166207.A_Practical_Handbook_for_the_Actor) | 1986 |
|
||||
|
||||
<a href="#top"><img src="https://img.shields.io/badge/Back%20to%20Top-↑-blue"/></a>
|
||||
|
||||
## Shakespeare
|
||||
| Name | Author | Goodreads Rating | Year Published |
|
||||
|------|--------|------------------|----------------|
|
||||
@@ -321,119 +461,168 @@
|
||||
| Shakespeare's Metrical Art | George T. Wright | [4.39](https://www.goodreads.com/book/show/428615.Shakespeare_s_Metrical_Art) | 1991 |
|
||||
| Hamlet in Purgatory | Stephen Greenblatt | [3.98](https://www.goodreads.com/book/show/33179.Hamlet_in_Purgatory) | 2002 |
|
||||
|
||||
<a href="#top"><img src="https://img.shields.io/badge/Back%20to%20Top-↑-blue"/></a>
|
||||
|
||||
## Fiction
|
||||
|
||||
### Classics
|
||||
| Name | Author | Goodreads Rating | Year Published |
|
||||
|------|--------|------------------|----------------|
|
||||
| The Master and Margarita | Mikhail Bulgakov | [4.32](https://www.goodreads.com/book/show/117833.The_Master_and_Margarita) | 1996 |
|
||||
| Infinite Jest | David Foster Wallace | [4.31](https://www.goodreads.com/book/show/6759.Infinite_Jest) | 1995 |
|
||||
| The Brothers Karamazov | Fyodor Dostoevsky, Richard Pevear, Larissa Volokhonsky | [4.30](https://www.goodreads.com/book/show/4934.The_Brothers_Karamazov) | 2002 |
|
||||
| Pride And Prejudice | Jane Austen | [4.24](https://www.goodreads.com/book/show/1885.Pride_and_Prejudice) | 2000 |
|
||||
| A Prayer for Owen Meany | John Irving | [4.22](https://www.goodreads.com/book/show/4473.A_Prayer_for_Owen_Meany) | 1990 |
|
||||
| Letters From The Earth | Mark Twain | [4.22](https://www.goodreads.com/book/show/37813.Letters_from_the_Earth) | 2004 |
|
||||
| The Master and Margarita | Mikhail Bulgakov | [4.32](https://www.goodreads.com/book/show/117833.The_Master_and_Margarita) | 1966 |
|
||||
| Infinite Jest | David Foster Wallace | [4.31](https://www.goodreads.com/book/show/6759.Infinite_Jest) | 1996 |
|
||||
| The Brothers Karamazov | Fyodor Dostoevsky, Richard Pevear, Larissa Volokhonsky | [4.30](https://www.goodreads.com/book/show/4934.The_Brothers_Karamazov) | 1880 |
|
||||
| Pride And Prejudice | Jane Austen | [4.24](https://www.goodreads.com/book/show/1885.Pride_and_Prejudice) | 1813 |
|
||||
| A Prayer for Owen Meany | John Irving | [4.22](https://www.goodreads.com/book/show/4473.A_Prayer_for_Owen_Meany) | 1989 |
|
||||
| Letters From The Earth | Mark Twain | [4.22](https://www.goodreads.com/book/show/37813.Letters_from_the_Earth) | 1962 |
|
||||
| One Flew Over the Cuckoo's Nest | Ken Kesey | [4.18](https://www.goodreads.com/book/show/332613.One_Flew_Over_the_Cuckoo_s_Nest) | 1963 |
|
||||
| Crime and Punishment | Fyodor Dostoyevsky | [4.18](https://www.goodreads.com/book/show/7144.Crime_and_Punishment) | 2002 |
|
||||
| Steppenwolf: A Novel | Hermann Hesse, Basil Creighton | [4.11](https://www.goodreads.com/book/show/16631.Steppenwolf) | 1999 |
|
||||
| The Glass Bead Game | Hermann Hesse, Richard and Clara Winston | [4.11](https://www.goodreads.com/book/show/16634.The_Glass_Bead_Game) | 2002 |
|
||||
| War and Peace | Leo Tolstoy | [4.11](https://www.goodreads.com/book/show/656.War_and_Peace) | 1998 |
|
||||
| Jane Eyre | Charlotte Brontë | [4.10](https://www.goodreads.com/book/show/10210.Jane_Eyre) | |
|
||||
| Germinal | Emile Zola | [4.10](https://www.goodreads.com/book/show/28407.Germinal) | 2004 |
|
||||
| If on a Winter's Night a Traveler | Italo Calvino and William Weaver | [4.08](https://www.goodreads.com/book/show/374233.If_on_a_Winter_s_Night_a_Traveler) | 1982 |
|
||||
| The Wall: (Intimacy) and Other Stories | Jean-Paul Sartre, Lloyd Alexander | [4.07](https://www.goodreads.com/book/show/10031.The_Wall) | 2010 |
|
||||
| Sense and Sensibility | Jane Austen | [4.06](https://www.goodreads.com/book/show/14935.Sense_and_Sensibility) | 2003 |
|
||||
| The Picture of Dorian Gray | Oscar Wilde | [4.06](https://www.goodreads.com/book/show/5297.The_Picture_of_Dorian_Gray) | 1998 |
|
||||
| Watership Down: A Novel | Richard Adams | [4.05 ](https://www.goodreads.com/book/show/76620.Watership_Down) |1975|
|
||||
| One Hundred Years of Solitude | Gabriel Garcia Marquez, Gregory Rabassa | [4.04](https://www.goodreads.com/book/show/320.One_Hundred_Years_of_Solitude) | 2003 |
|
||||
| The Death of Ivan Ilych | Leo Tolstoy | [4.04](https://www.goodreads.com/book/show/18386.The_Death_of_Ivan_Ilych) | |
|
||||
| Anna Karenina | Leo Tolstoy | [4.02](https://www.goodreads.com/book/show/15823480-anna-karenina) | 2012 |
|
||||
| Bleak House | Charles Dickens | [4.00](https://www.goodreads.com/book/show/31242.Bleak_House) | 2006 |
|
||||
| J'accuse | Emile Zola | [3.99](https://www.goodreads.com/book/show/816964.J_accuse) | 1998 |
|
||||
| Catch 22 | Joseph Heller | [3.98](https://www.goodreads.com/book/show/4610.Catch_22) | 2004 |
|
||||
| The House of Mirth | Edith Wharton | [3.94](https://www.goodreads.com/book/show/17728.The_House_of_Mirth) | 2006 |
|
||||
| Confessions of a Mask | Yukio Mishima | [3.91](https://www.goodreads.com/book/show/62794.Confessions_of_a_Mask) | 1998 |
|
||||
| De L'esprit Des Lois | Montesquieu | [3.91](https://www.goodreads.com/book/show/29854007-de-l-esprit-des-lois-nouvelle-edition) | 1995 |
|
||||
| Crime and Punishment | Fyodor Dostoyevsky | [4.18](https://www.goodreads.com/book/show/7144.Crime_and_Punishment) | 1866 |
|
||||
| 1984 | George Orwell | [4.17](https://www.goodreads.com/book/show/40961427-1984) | 1949 |
|
||||
| The Giver | Lois Lowry | [4.13](https://www.goodreads.com/book/show/3636.The_Giver) | 1993 |
|
||||
| Steppenwolf: A Novel | Hermann Hesse, Basil Creighton | [4.11](https://www.goodreads.com/book/show/16631.Steppenwolf) | 1927 |
|
||||
| The Glass Bead Game | Hermann Hesse, Richard and Clara Winston | [4.11](https://www.goodreads.com/book/show/16634.The_Glass_Bead_Game) | 1943 |
|
||||
| War and Peace | Leo Tolstoy | [4.11](https://www.goodreads.com/book/show/656.War_and_Peace) | 1867 |
|
||||
| Jane Eyre | Charlotte Brontë | [4.10](https://www.goodreads.com/book/show/10210.Jane_Eyre) | 1847 |
|
||||
| Germinal | Emile Zola | [4.10](https://www.goodreads.com/book/show/28407.Germinal) | 1885 |
|
||||
| If on a Winter's Night a Traveler | Italo Calvino and William Weaver | [4.08](https://www.goodreads.com/book/show/374233.If_on_a_Winter_s_Night_a_Traveler) | 1979 |
|
||||
| Slaughterhouse-Five | Kurt Vonnegut Jr. | [4.08](https://www.goodreads.com/book/show/4981.Slaughterhouse_Five) | 1969 |
|
||||
| The Wall: (Intimacy) and Other Stories | Jean-Paul Sartre, Lloyd Alexander | [4.07](https://www.goodreads.com/book/show/10031.The_Wall) | 1948 |
|
||||
| Sense and Sensibility | Jane Austen | [4.06](https://www.goodreads.com/book/show/14935.Sense_and_Sensibility) | 1811 |
|
||||
| The Picture of Dorian Gray | Oscar Wilde | [4.06](https://www.goodreads.com/book/show/5297.The_Picture_of_Dorian_Gray) | 1890 |
|
||||
| Watership Down: A Novel | Richard Adams | [4.05 ](https://www.goodreads.com/book/show/76620.Watership_Down) |1972|
|
||||
| One Hundred Years of Solitude | Gabriel Garcia Marquez, Gregory Rabassa | [4.04](https://www.goodreads.com/book/show/320.One_Hundred_Years_of_Solitude) | 1967 |
|
||||
| The Death of Ivan Ilych | Leo Tolstoy | [4.04](https://www.goodreads.com/book/show/18386.The_Death_of_Ivan_Ilych) | 1886 |
|
||||
| Siddhartha | Hermann Hesse | [4.03](https://www.goodreads.com/book/show/52036.Siddhartha) | 1922 |
|
||||
| Anna Karenina | Leo Tolstoy | [4.02](https://www.goodreads.com/book/show/15823480-anna-karenina) | 1878 |
|
||||
| Bleak House | Charles Dickens | [4.00](https://www.goodreads.com/book/show/31242.Bleak_House) | 1853 |
|
||||
| J'accuse | Emile Zola | [3.99](https://www.goodreads.com/book/show/816964.J_accuse) | 1898 |
|
||||
| Catch 22 | Joseph Heller | [3.98](https://www.goodreads.com/book/show/4610.Catch_22) | 1961 |
|
||||
| The House of Mirth | Edith Wharton | [3.94](https://www.goodreads.com/book/show/17728.The_House_of_Mirth) | 1905 |
|
||||
| Confessions of a Mask | Yukio Mishima | [3.91](https://www.goodreads.com/book/show/62794.Confessions_of_a_Mask) | 1949 |
|
||||
| De L'esprit Des Lois | Montesquieu | [3.91](https://www.goodreads.com/book/show/29854007-de-l-esprit-des-lois-nouvelle-edition) | 1748 |
|
||||
| Love in the Time of Cholera | Gabriel García Marquéz | [3.9](https://www.goodreads.com/book/show/9712.Love_in_the_Time_of_Cholera) | 1985 |
|
||||
| Don Quixote | Miguel de Cervantes | [3.85](http://www.goodreads.com/book/show/3836.Don_Quixote) | 2003 |
|
||||
| Mansfield Park | Jane Austen | [3.84](https://www.goodreads.com/book/show/45032) | 2003 |
|
||||
| Wuthering Heights | Emily Bronte | [3.82](https://www.goodreads.com/book/show/6185.Wuthering_Heights) | 2002 |
|
||||
| Père Goriot | Honoré de Balzac | [3.82](https://www.goodreads.com/book/show/59145.P_re_Goriot) | 1997 |
|
||||
| Adventures of Huckleberry Finn | Mark Twain | [3.80](https://www.goodreads.com/book/show/2956.The_Adventures_of_Huckleberry_Finn) | 2002 |
|
||||
| The Catcher in the Rye | J.D. Salinger | [3.79](https://www.goodreads.com/book/show/5107.The_Catcher_in_the_Rye) | 2001 |
|
||||
| Eugénie Grandet | Honoré de Balzac | [3.79](https://www.goodreads.com/book/show/59142.Eug_nie_Grandet) | 2003 |
|
||||
| Don Quixote | Miguel de Cervantes | [3.85](http://www.goodreads.com/book/show/3836.Don_Quixote) | 1605 |
|
||||
| Mansfield Park | Jane Austen | [3.84](https://www.goodreads.com/book/show/45032) | 1814 |
|
||||
| Wuthering Heights | Emily Bronte | [3.82](https://www.goodreads.com/book/show/6185.Wuthering_Heights) | 1847 |
|
||||
| Père Goriot | Honoré de Balzac | [3.82](https://www.goodreads.com/book/show/59145.P_re_Goriot) | 1834 |
|
||||
| Adventures of Huckleberry Finn | Mark Twain | [3.80](https://www.goodreads.com/book/show/2956.The_Adventures_of_Huckleberry_Finn) | 1884 |
|
||||
| The Catcher in the Rye | J.D. Salinger | [3.79](https://www.goodreads.com/book/show/5107.The_Catcher_in_the_Rye) | 1951 |
|
||||
| Eugénie Grandet | Honoré de Balzac | [3.79](https://www.goodreads.com/book/show/59142.Eug_nie_Grandet) | 1833 |
|
||||
| Zen and the Art of Motorcycle Maintenance: An Inquiry Into Values | Robert M. Pirsig | [3.76](https://www.goodreads.com/book/show/629.Zen_and_the_Art_of_Motorcycle_Maintenance) | 1974 |
|
||||
| Candide | Voltaire | [3.76](https://www.goodreads.com/book/show/19380.Candide) | 1991 |
|
||||
| Madame Bovary | Gustave Flaubert | [3.65](https://www.goodreads.com/book/show/2175.Madame_Bovary) | 2004 |
|
||||
| Confessions | Jean-Jacques Rousseau | [3.61](https://www.goodreads.com/book/show/12649.Confessions) | 2003 |
|
||||
| Lettres persanes | Montesquieu | [3.54](http://www.goodreads.com/book/show/509686.Persian_Letters) | |
|
||||
| Candide | Voltaire | [3.76](https://www.goodreads.com/book/show/19380.Candide) | 1759 |
|
||||
| Atlas Shrugged | Ayn Rand | [3.68](https://www.goodreads.com/book/show/9365.Atlas_Shrugged) | 1957 |
|
||||
| Madame Bovary | Gustave Flaubert | [3.65](https://www.goodreads.com/book/show/2175.Madame_Bovary) | 1856 |
|
||||
| Confessions | Jean-Jacques Rousseau | [3.61](https://www.goodreads.com/book/show/12649.Confessions) | 1782 |
|
||||
| Lettres persanes | Montesquieu | [3.54](http://www.goodreads.com/book/show/509686.Persian_Letters) | 1721 |
|
||||
| The Director | David Ignatius | [3.43](http://www.goodreads.com/book/show/23316525-the-director) | 2015 |
|
||||
|
||||
<a href="#top"><img src="https://img.shields.io/badge/Back%20to%20Top-↑-blue"/></a>
|
||||
|
||||
### Fantasy
|
||||
| Name | Author | Goodreads Rating | Year Published |
|
||||
|------|--------|------------------|----------------|
|
||||
| The Stormlight Archive | Brandon Sanderson | [4.81](https://www.goodreads.com/book/show/39904817-stormlight-archive-4-book-set?ac=1&from_search=true&qid=QO2o6tRJg4&rank=1) | 2007 |
|
||||
| The Kingkiller Chronicle | Patrick Rothfuss | [4.55](https://www.goodreads.com/series/45262-the-kingkiller-chronicle) | 2007 |
|
||||
| The Lord of the Rings | J.R.R. Tolkien | [4.47](https://www.goodreads.com/series/66175-the-lord-of-the-rings) | 2005 |
|
||||
| The Lord of the Rings | J.R.R. Tolkien | [4.47](https://www.goodreads.com/series/66175-the-lord-of-the-rings) | 1954 |
|
||||
| A Song of Ice and Fire | George R.R. Martin | [4.45](https://www.goodreads.com/series/43790-a-song-of-ice-and-fire) | 2005 |
|
||||
| Harry Potter | J.K. Rowling | [4.44](https://www.goodreads.com/series/45175-harry-potter) | 1997 |
|
||||
| Mistborn | Brandon Sanderson | [4.43](https://www.goodreads.com/series/40910-mistborn) | 2006 |
|
||||
| Harry Potter and the Methods of Rationality | Eliezer Yudkowsky | [4.38](https://www.goodreads.com/book/show/10016013-harry-potter-and-the-methods-of-rationality) | 2015 |
|
||||
| Discworld | Terry Pratchett | [4.32](https://www.goodreads.com/series/40650-discworld) | 2001 |
|
||||
| The Dark Tower | Stephen King | [4.27](https://www.goodreads.com/series/40750-the-dark-tower) | |
|
||||
| His Dark Materials | Philip Pullman | [4.25](https://www.goodreads.com/book/show/18116.His_Dark_Materials) | |
|
||||
| The Last Wish - Saga | Andrzej Sapkowski | [4.2](https://www.goodreads.com/book/show/1128434.The_Last_Wish) | 1993 |
|
||||
| The Dark Tower | Stephen King | [4.27](https://www.goodreads.com/series/40750-the-dark-tower) | 1982 |
|
||||
| And the Mountains Echoed | Khaled Hosseini | [4.26](https://www.goodreads.com/book/show/21897740-and-the-mountains-echoed) | 2013 |
|
||||
| His Dark Materials | Philip Pullman | [4.25](https://www.goodreads.com/book/show/18116.His_Dark_Materials) | 1995 |
|
||||
| The Last Wish | Andrzej Sapkowski | [4.2](https://www.goodreads.com/book/show/1128434.The_Last_Wish) | 1993 |
|
||||
| The Chronicles of Narnia | Clive Staples Lewis | [4.24](https://www.goodreads.com/book/show/11127.The_Chronicles_of_Narnia) | 2002 |
|
||||
| The Wheel of Time | Robert Jordan | [4.19](https://www.goodreads.com/series/41526-the-wheel-of-time) | 1990 |
|
||||
| The City & The City | China Mieville | [3.91](https://www.goodreads.com/book/show/4703581-the-city-the-city) | 2009 |
|
||||
| The Broken Empire | Mark Lawrence | [3.87](https://www.goodreads.com/series/64473-the-broken-empire) | 2011 |
|
||||
| Of Fire and Stars Book |Audrey Coulthurst | [3.76](https://www.goodreads.com/book/show/25164304-of-fire-and-stars) | 2016 |
|
||||
|
||||
<a href="#top"><img src="https://img.shields.io/badge/Back%20to%20Top-↑-blue"/></a>
|
||||
|
||||
### Historical Fiction
|
||||
| Name | Author | Goodreads Rating | Year Published |
|
||||
|------|--------|------------------|----------------|
|
||||
| Lonesome Dove | Larry McMurtry | [4.47](https://www.goodreads.com/book/show/256008.Lonesome_Dove) | 1999 |
|
||||
| The Help | Kathryn Stockett | [4.45](https://www.goodreads.com/book/show/4667024-the-help) | |
|
||||
| The Book Thief | Markus Zusak | [4.36](https://www.goodreads.com/book/show/19063.The_Book_Thief) | |
|
||||
| Lonesome Dove | Larry McMurtry | [4.47](https://www.goodreads.com/book/show/256008.Lonesome_Dove) | 1985 |
|
||||
| The Help | Kathryn Stockett | [4.45](https://www.goodreads.com/book/show/4667024-the-help) | 2009 |
|
||||
| A Thousand Splendid Suns | Khaled Hosseini | [4.4](https://www.goodreads.com/book/show/128029.A_Thousand_Splendid_Suns) | 2007 |
|
||||
| The Book Thief | Markus Zusak | [4.36](https://www.goodreads.com/book/show/19063.The_Book_Thief) | 2005 |
|
||||
| All the Light We Cannot See | Anthony Doerr | [4.31](https://www.goodreads.com/book/show/18143977-all-the-light-we-cannot-see) | 2014 |
|
||||
| The Pillars of the Earth | Ken Follett | [4.29](https://www.goodreads.com/book/show/5043.The_Pillars_of_the_Earth?from_search=true) | 2002 |
|
||||
| Kane and Abel | Jeffrey Archer | [4.27](http://www.goodreads.com/book/show/78983.Kane_and_Abel) | 2004 |
|
||||
| Emma | Jane Austen | [3.99](https://www.goodreads.com/book/show/6969.Emma) | 2003 |
|
||||
| Sophie's World: A Novel About the History of Philosophy | Jostein Gaarder and Paulette Moller | [3.88](https://www.goodreads.com/book/show/10959.Sophie_s_World) | 1996 |
|
||||
| The Kite Runner | Khaled Hosseini | [4.3](https://www.goodreads.com/book/show/77203.The_Kite_Runner) | 2003 |
|
||||
| The Pillars of the Earth | Ken Follett | [4.29](https://www.goodreads.com/book/show/5043.The_Pillars_of_the_Earth?from_search=true) | 1989 |
|
||||
| Kane and Abel | Jeffrey Archer | [4.27](http://www.goodreads.com/book/show/78983.Kane_and_Abel) | 1979 |
|
||||
| Memoirs of a Geisha | Arthur Golden | [4.12](https://www.goodreads.com/book/show/929.Memoirs_of_a_Geisha) | 1997 |
|
||||
| One Day in the Life of Ivan Denisovich | Aleksandr Solzhenitsyn | [4](https://www.goodreads.com/book/show/17125.One_Day_in_the_Life_of_Ivan_Denisovich) | 1962 |
|
||||
| Emma | Jane Austen | [3.99](https://www.goodreads.com/book/show/6969.Emma) | 1815 |
|
||||
| Sophie's World: A Novel About the History of Philosophy | Jostein Gaarder and Paulette Moller | [3.88](https://www.goodreads.com/book/show/10959.Sophie_s_World) | 1991 |
|
||||
|
||||
<a href="#top"><img src="https://img.shields.io/badge/Back%20to%20Top-↑-blue"/></a>
|
||||
|
||||
### Humor
|
||||
| Name | Author | Goodreads Rating | Year Published |
|
||||
|------|--------|------------------|----------------|
|
||||
| I Hope They Serve Beer In Hell | Tucker Max | [3.51](https://www.goodreads.com/book/show/9010.I_Hope_They_Serve_Beer_in_Hell) | 2006 |
|
||||
|
||||
<a href="#top"><img src="https://img.shields.io/badge/Back%20to%20Top-↑-blue"/></a>
|
||||
|
||||
### Mystery
|
||||
| Name | Author | Goodreads Rating | Year Published |
|
||||
|------|--------|------------------|----------------|
|
||||
| Sherlock Holmes | Arthur Conan Doyle | [4.30](https://www.goodreads.com/series/49996-sherlock-holmes) | 1998 |
|
||||
| And Then There Were None | Agatha Christie | [4.26](https://www.goodreads.com/series/49996-sherlock-holmes) | 1939 |
|
||||
| The Murder of Roger Ackroyd | Agatha Christie | [4.20](http://www.goodreads.com/book/show/16328.The_Murder_of_Roger_Ackroyd) | 2006 |
|
||||
| The Eight | Katherine Neville | [4.17](https://www.goodreads.com/book/show/113310.The_Eight) | |
|
||||
| The Girl with the Dragon Tattoo | Stieg Larsson | [4.14](https://www.goodreads.com/book/show/2429135.The_Girl_with_the_Dragon_Tattoo) | 2005 |
|
||||
| Memory Man | David Baldacci | [4.05](https://www.goodreads.com/book/show/23153154-memory-man) | 2015 |
|
||||
| The Turn of the Key | Ruth Ware | [3.94](https://www.goodreads.com/book/show/42080142-the-turn-of-the-key) | 2019 |
|
||||
| Angels & Demons | Dan Brown | [3.93](https://www.goodreads.com/book/show/960.Angels_Demons) | 2000 |
|
||||
| The Girl on the Train | Paula Hawkins | [3.88](https://www.goodreads.com/book/show/22557272-the-girl-on-the-train) | 2015 |
|
||||
| The Da Vinci Code | Dan Brown | [3.79](http://www.goodreads.com/book/show/968.The_Da_Vinci_Code) | 2006 |
|
||||
|
||||
<a href="#top"><img src="https://img.shields.io/badge/Back%20to%20Top-↑-blue"/></a>
|
||||
|
||||
### Science Fiction
|
||||
| Name | Author | Goodreads Rating | Year Published |
|
||||
|------|--------|------------------|----------------|
|
||||
| The Hitchhiker's Guide to the Galaxy | Douglas Adams | [4.38](http://www.goodreads.com/book/show/11.The_Hitchhiker_s_Guide_to_the_Galaxy) ||
|
||||
| Project Hail Mary | Andy Weir | [4.52](https://www.goodreads.com/book/show/54493401-project-hail-mary) | 2021 |
|
||||
| The Martian | Andy Weir | [4.40](https://www.goodreads.com/book/show/18007564-the-martian) | 2012 |
|
||||
| The Hitchhiker's Guide to the Galaxy | Douglas Adams | [4.38](http://www.goodreads.com/book/show/11.The_Hitchhiker_s_Guide_to_the_Galaxy) | 1979|
|
||||
| Champion | Marie Lu | [4.32](https://www.goodreads.com/book/show/14290364-champion) | 2013 |
|
||||
| Ready Player One | Ernest Cline | [4.31](https://www.goodreads.com/book/show/9969571-ready-player-one) | 2011 |
|
||||
| 11/22/63 | Stephen King | [4.31](https://www.goodreads.com/book/show/10644930-11-22-63) | 2011 |
|
||||
| Ender's Game - Saga | Orson Scott Card | [4.30](https://www.goodreads.com/search?utf8=%E2%9C%93&q=ender%27s+saga&search_type=books&search%5Bfield%5D=on) | 1994 |
|
||||
| The Player of Games | Iain M. Banks | [4.26](https://www.goodreads.com/book/show/18630.The_Player_of_Games) | 1997 |
|
||||
| The Fifth Sacred Thing | Starhawk | [4.25](https://www.goodreads.com/book/show/80689.The_Fifth_Sacred_Thing) | 1994 |
|
||||
| Prodigy | Marie Lu | [4.24](https://www.goodreads.com/book/show/13414446-prodigy?ac=1&from_search=true&qid=BL85jNXP8P&rank=1) | 2013
|
||||
| Hyperion | Dan Simmons | [4.21](https://www.goodreads.com/book/show/77566.Hyperion) | 1989 |
|
||||
| Cosmicomics | Italo Calvino | [4.2](https://www.goodreads.com/book/show/59780.Cosmicomics) | 1965 |
|
||||
| The Diamond Age | Neal Stephenson | [4.19](http://www.goodreads.com/book/show/827.The_Diamond_Age) | 2000 |
|
||||
| Dune Chronicles | Frank Herbert | [4.19](https://www.goodreads.com/search?q=dune) | 2006 |
|
||||
| Roadside Picnic | Arkady Strugatsky, Boris Strugatsky | [4.16](https://www.goodreads.com/book/show/331256.Roadside_Picnic) | 1972 |
|
||||
| The Forever War | Joe Haldemann | [4.15](https://www.goodreads.com/book/show/21611.The_Forever_War) | 1974
|
||||
| Contact | Carl Sagan | [4.14](https://www.goodreads.com/book/show/61666.Contact) | 1985 |
|
||||
| Foundation | Isaac Asimov | [4.13](https://www.goodreads.com/book/show/29579.Foundation) | 2004 |
|
||||
| Snow Crash | Neal Stephenson | [4.02](https://www.goodreads.com/book/show/830.Snow_Crash) | 2000 |
|
||||
| Brave New World | Aldous Huxley | [3.99](https://www.goodreads.com/book/show/5129.Brave_New_World) | 1932 |
|
||||
| Fahrenheit 451 | Ray Bradbury | [3.97](https://www.goodreads.com/book/show/17470674-fahrenheit-451) | 2006 |
|
||||
| Little Brother | Cory Doctorow | [3.94](https://www.goodreads.com/book/show/954674.Little_Brother) | 2008 |
|
||||
| The Time Machine | H.G Wells | [3.89](https://www.goodreads.com/book/show/2493.The_Time_Machine?from_search=true&from_srp=true&qid=UOQqEw4cz3&rank=1) | 1895 |
|
||||
|
||||
<a href="#top"><img src="https://img.shields.io/badge/Back%20to%20Top-↑-blue"/></a>
|
||||
|
||||
### Horror
|
||||
| Name | Author | Goodreads Rating | Year Published |
|
||||
|------|--------|------------------|----------------|
|
||||
| It | Stephen King | [4.24](https://www.goodreads.com/book/show/830502.It) | 1986 |
|
||||
| House of Leaves | Mark Z. Danielewski | [4.13](http://www.goodreads.com/book/show/24800.House_of_Leaves) | 2000 |
|
||||
| If it bleeds | Stephen King | [4.10](https://www.goodreads.com/book/show/46015758-if-it-bleeds) | 2020 |
|
||||
| Rosemary's Baby | Ira Levin | [4.00](https://www.goodreads.com/book/show/228296.Rosemary_s_Baby) | 1967 |
|
||||
| Dracula | Bram Stoker | [3.98](http://www.goodreads.com/book/show/17245.Dracula) | 1986 |
|
||||
| London (Surviving The Evacuation #1) | Frank Tayell | [3.86](https://www.goodreads.com/book/show/18655852-london) | 2013 |
|
||||
| Frankenstein | Mary Shelley, Maurice Hindle | [3.75](http://www.goodreads.com/book/show/18490.Frankenstein) | 2003 |
|
||||
|
||||
<a href="#top"><img src="https://img.shields.io/badge/Back%20to%20Top-↑-blue"/></a>
|
||||
|
||||
### Miscellaneous
|
||||
| Name | Author | Goodreads Rating | Year Published |
|
||||
|------|--------|------------------|----------------|
|
||||
@@ -444,33 +633,78 @@
|
||||
| Ghost Fleet | P.W. Singer and August Cole | [3.62](https://www.goodreads.com/book/show/22749719-ghost-fleet?from_search=true) | 2015 |
|
||||
| Future Crimes | Marc Goodman | [3.42](https://www.goodreads.com/book/show/22318398-future-crimes?from_search=true) | 1990 |
|
||||
|
||||
<a href="#top"><img src="https://img.shields.io/badge/Back%20to%20Top-↑-blue"/></a>
|
||||
|
||||
## Health
|
||||
| Name | Author | Goodreads Rating | Year Published |
|
||||
|------|--------|------------------|----------------|
|
||||
| How Not to Die: Discover the Foods Scientifically Proven to Prevent and Reverse Disease | Michael Greger, M.D. | [4.54](https://www.goodreads.com/book/show/25663961-how-not-to-die) | 2015 |
|
||||
| Overcoming Gravity: A Systematic Approach to Gymnastics and Bodyweight Strength (2nd edition) | Steven Low | [4.3](https://www.goodreads.com/book/show/33293328-overcoming-gravity) | 2016 |
|
||||
| Breath: The New Science of a Lost Art | James Nestor | [4.15](https://www.goodreads.com/book/show/48890486-breath) | 2020 |
|
||||
| Convict Conditioning | Paul Wade | [4.13](http://www.goodreads.com/book/show/7305111-convict-conditioning) | 2012 |
|
||||
| Eat and Run: My Unlikely Journey to Ultramarathon Greatness | Scott Jurek, Steve Friedman | [3.95](https://www.goodreads.com/book/show/13202092-eat-and-run) | 2012 |
|
||||
| Brain Food: The Surprising Science of Eating for Cognitive Power | Lisa Mosconi | [3.92](https://www.goodreads.com/book/show/35457267-brain-food) | 2018 |
|
||||
| Super Human: The Bulletproof Plan to Age Backward and Maybe Even Live Forever | Dave Asprey | [3.86](https://www.goodreads.com/book/show/43801612-super-human?ref=nav_sb_ss_3_11) | 2019 |
|
||||
| 8 Weeks to Optimum Health | Andrew Weil | [3.86](https://www.goodreads.com/book/show/37124.8_Weeks_to_Optimum_Health) | |
|
||||
| Grain Brain: The Surprising Truth about Wheat, Carbs, and Sugar--Your Brain's Silent Killers | David Perlmutter | [3.89](https://www.goodreads.com/book/show/17333302-grain-brain) | 2013 |
|
||||
|
||||
<a href="#top"><img src="https://img.shields.io/badge/Back%20to%20Top-↑-blue"/></a>
|
||||
|
||||
## Design
|
||||
| Name | Author | Goodreads Rating | Year Published |
|
||||
|------|--------|------------------|----------------|
|
||||
| Pattern Language: Towns, Buildings, Construction | Christopher Alexander, Sara Ishikawa, Murray Silverstein, Max Jacobson, Ingrid Fiksdahl-King and Shlomo Angel | [4.38](https://www.goodreads.com/book/show/79766.A_Pattern_Language) | 1977 |
|
||||
| Data visualization handbook | Juuso Koponen, Jonatan Hildén | [4.33](https://www.goodreads.com/book/show/52326089-data-visualization-handbook) | 2019 |
|
||||
| How Buildings Learn: What Happens After They're Built | Stewart Brand | [4.32](https://www.goodreads.com/book/show/38310.How_Buildings_Learn) | 1995 |
|
||||
| Don't Make Me Think, Revisited: A Common Sense Approach to Web Usability | Steve Krug | [4.24](https://www.goodreads.com/book/show/18197267-don-t-make-me-think-revisited) | 2014 |
|
||||
| The Design of Everyday Things | Donald Norman | [4.18](http://www.goodreads.com/book/show/840.The_Design_of_Everyday_Things) | 2002 |
|
||||
| Mismatch: How Inclusion Shapes Design | Kat Holmes, John Maeda | [4.14](https://www.goodreads.com/book/show/39644200-mismatch) | 2018 |
|
||||
| The Art of Looking Sideways | Alan Fletcher | [4.10](https://www.goodreads.com/book/show/15778.The_Art_of_Looking_Sideways) | 2001 |
|
||||
| Change by Design: How Design Thinking Transforms Organizations and Inspires Innovation | Tim Brown | [3.88](https://www.goodreads.com/book/show/6671664-change-by-design) | 2009 |
|
||||
|
||||
<a href="#top"><img src="https://img.shields.io/badge/Back%20to%20Top-↑-blue"/></a>
|
||||
|
||||
## Travel
|
||||
| Name | Author | Goodreads Rating | Year Published |
|
||||
|------|--------|------------------|----------------|
|
||||
| Atlas Obscura: An Explorer's Guide to the World's Hidden Wonders | Joshua Foer | [4.24](https://www.goodreads.com/book/show/28110891-atlas-obscura) | 2016 |
|
||||
|
||||
## Credits
|
||||
<a href="#top"><img src="https://img.shields.io/badge/Back%20to%20Top-↑-blue"/></a>
|
||||
|
||||
## Language
|
||||
| Name | Author | Goodreads Rating | Year Published |
|
||||
|------|--------|------------------|----------------|
|
||||
| Le Ton beau de Marot: In Praise of the Music of Language | Douglas R. Hofstadter | [4.22](https://www.goodreads.com/book/show/248193.Le_Ton_beau_de_Marot) | 1997 |
|
||||
| The Language Instinct: How the Mind Creates Language | Steven Pinker | [4.02](https://www.goodreads.com/book/show/5755.The_Language_Instinct) | 2000 |
|
||||
|
||||
<a href="#top"><img src="https://img.shields.io/badge/Back%20to%20Top-↑-blue"/></a>
|
||||
|
||||
## Nature
|
||||
| Name | Author | Goodreads Rating | Year Published |
|
||||
|------|--------|------------------|----------------|
|
||||
| The Wild Places | Robert Macfarlane | [4.27](https://www.goodreads.com/book/show/2688775-the-wild-places) | 2007 |
|
||||
| The Sixth Extinction: An Unnatural History | Elizabeth Kolbert | [4.13](https://www.goodreads.com/book/show/17910054-the-sixth-extinction) | 2014 |
|
||||
| Pilgrim at Tinker Creek | Annie Dillard | [4.11](https://www.goodreads.com/book/show/12527.Pilgrim_at_Tinker_Creek) | 1974 |
|
||||
| A Walk in the Woods: Rediscovering America on the Appalachian Trai | Bill Bryson | [4.06](https://www.goodreads.com/book/show/9791.A_Walk_in_the_Woods) | 2006 |
|
||||
| The Uninhabitable Earth: Life After Warming | David Wallace-Wells | [4.06](https://www.goodreads.com/book/show/41552709-the-uninhabitable-earth) | 2019 |
|
||||
|
||||
<a href="#top"><img src="https://img.shields.io/badge/Back%20to%20Top-↑-blue"/></a>
|
||||
|
||||
## Art
|
||||
| Name | Author | Goodreads Rating | Year Published |
|
||||
|------|--------|------------------|----------------|
|
||||
| The New Drawing on the Right Side of the Brain | Betty Edwards | [3.86](https://www.goodreads.com/book/show/627206.The_New_Drawing_on_the_Right_Side_of_the_Brain) | 1989 |
|
||||
| Steal Like an Artist: 10 Things Nobody Told You About Being Creative | Austin Kleon | [3.92](https://www.goodreads.com/book/show/13099738-steal-like-an-artist) | 2012 |
|
||||
| Show Your Work!: 10 Ways to Share Your Creativity and Get Discovered | Austin Kleon | [4.10](https://www.goodreads.com/book/show/18290401-show-your-work) | 2014 |
|
||||
|
||||
<a href="#top"><img src="https://img.shields.io/badge/Back%20to%20Top-↑-blue"/></a>
|
||||
|
||||
# Credits
|
||||
* [@hackerkid](https://github.com/hackerkid) for starting the list.
|
||||
* [@geritol](https://github.com/geritol) for building the framework for maintaining the list.
|
||||
* All the [contributors](https://github.com/hackerkid/Mind-Expanding-Books/graphs/contributors) for keeping the list updated by adding new books.
|
||||
|
||||
## License
|
||||
# License
|
||||
[](http://creativecommons.org/publicdomain/zero/1.0/)
|
||||
|
||||
To the extent possible under law, [Vishnu Ks](https://github.com/hackerkid) has waived all copyright and related or neighboring rights to this work.
|
||||
|
||||
22
app/.eslintrc.js
Normal file
22
app/.eslintrc.js
Normal file
@@ -0,0 +1,22 @@
|
||||
module.exports = {
|
||||
env: {
|
||||
browser: true,
|
||||
es2020: true,
|
||||
},
|
||||
extends: [
|
||||
'plugin:react/recommended',
|
||||
'airbnb',
|
||||
],
|
||||
parserOptions: {
|
||||
ecmaFeatures: {
|
||||
jsx: true,
|
||||
},
|
||||
ecmaVersion: 11,
|
||||
sourceType: 'module',
|
||||
},
|
||||
plugins: [
|
||||
'react',
|
||||
],
|
||||
rules: {
|
||||
},
|
||||
};
|
||||
72
app/.gitignore
vendored
Normal file
72
app/.gitignore
vendored
Normal file
@@ -0,0 +1,72 @@
|
||||
# Logs
|
||||
logs
|
||||
*.log
|
||||
npm-debug.log*
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
|
||||
# Runtime data
|
||||
pids
|
||||
*.pid
|
||||
*.seed
|
||||
*.pid.lock
|
||||
|
||||
# Directory for instrumented libs generated by jscoverage/JSCover
|
||||
lib-cov
|
||||
|
||||
# Coverage directory used by tools like istanbul
|
||||
coverage
|
||||
|
||||
# nyc test coverage
|
||||
.nyc_output
|
||||
|
||||
# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
|
||||
.grunt
|
||||
|
||||
# Bower dependency directory (https://bower.io/)
|
||||
bower_components
|
||||
|
||||
# node-waf configuration
|
||||
.lock-wscript
|
||||
|
||||
# Compiled binary addons (http://nodejs.org/api/addons.html)
|
||||
build/Release
|
||||
|
||||
# Dependency directories
|
||||
node_modules/
|
||||
jspm_packages/
|
||||
|
||||
# Typescript v1 declaration files
|
||||
typings/
|
||||
|
||||
# Optional npm cache directory
|
||||
.npm
|
||||
|
||||
# Optional eslint cache
|
||||
.eslintcache
|
||||
|
||||
# Optional REPL history
|
||||
.node_repl_history
|
||||
|
||||
# Output of 'npm pack'
|
||||
*.tgz
|
||||
|
||||
# dotenv environment variables file
|
||||
.env
|
||||
|
||||
# gatsby files
|
||||
.cache/
|
||||
public
|
||||
|
||||
# Mac files
|
||||
.DS_Store
|
||||
|
||||
# Yarn
|
||||
yarn-error.log
|
||||
.pnp/
|
||||
.pnp.js
|
||||
# Yarn Integrity file
|
||||
.yarn-integrity
|
||||
|
||||
# ignore package-lock as it complicates merging
|
||||
package-lock.json
|
||||
4
app/.prettierignore
Normal file
4
app/.prettierignore
Normal file
@@ -0,0 +1,4 @@
|
||||
.cache
|
||||
package.json
|
||||
package-lock.json
|
||||
public
|
||||
7
app/.prettierrc
Normal file
7
app/.prettierrc
Normal file
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"endOfLine": "lf",
|
||||
"semi": false,
|
||||
"singleQuote": false,
|
||||
"tabWidth": 2,
|
||||
"trailingComma": "es5"
|
||||
}
|
||||
1
app/.prettierrc.json
Normal file
1
app/.prettierrc.json
Normal file
@@ -0,0 +1 @@
|
||||
{}
|
||||
22
app/LICENSE
Normal file
22
app/LICENSE
Normal file
@@ -0,0 +1,22 @@
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2015 gatsbyjs
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
|
||||
39
app/README.md
Normal file
39
app/README.md
Normal file
@@ -0,0 +1,39 @@
|
||||
`app/` directory contains the source code of the Mind Expanding Books [website](https://books.vishnuks.com)
|
||||
|
||||
## How to setup development environment
|
||||
|
||||
#### Verify Node Install
|
||||
|
||||
```
|
||||
node -v
|
||||
npm -v
|
||||
```
|
||||
|
||||
#### Install Gatsby CLI
|
||||
|
||||
```
|
||||
npm install -g gatsby-cli
|
||||
```
|
||||
|
||||
```bash
|
||||
|
||||
git clone https://github.com/hackerkid/Mind-Expanding-Books
|
||||
cd app/
|
||||
npm install
|
||||
gatsby develop
|
||||
```
|
||||
|
||||
Once this is done, the development server should be accessible at http://localhost:8000
|
||||
|
||||
## High level overview of the website
|
||||
|
||||
- The website is made using Gatsby, which is a React based static site generator.
|
||||
- The website is deployed in Netlify automatically whenever a commit is pushed to GitHub.
|
||||
- When you create a pull request with changes to the source code, Netlify will automatically
|
||||
create a website for previewing the changes. You can click on "Details" in the "Deploy preview ready!"
|
||||
message in the pull request page for seeing the website.
|
||||
|
||||
## From where does the website fetches the data of the books?
|
||||
|
||||
Website fetches the data of the books from `app/src/data/books.json` file. See [README in utils directory](../utils/README.MD)
|
||||
for details on how this file is generated.
|
||||
14
app/gatsby-browser.js
Normal file
14
app/gatsby-browser.js
Normal file
@@ -0,0 +1,14 @@
|
||||
/**
|
||||
* Implement Gatsby's Browser APIs in this file.
|
||||
*
|
||||
* See: https://www.gatsbyjs.org/docs/browser-apis/
|
||||
*/
|
||||
|
||||
// You can delete this file if you're not using it
|
||||
import React from "react"
|
||||
|
||||
import GlobalState from "./src/context/globalState"
|
||||
|
||||
export const wrapRootElement = ({ element }) => (
|
||||
<GlobalState>{element}</GlobalState>
|
||||
)
|
||||
46
app/gatsby-config.js
Normal file
46
app/gatsby-config.js
Normal file
@@ -0,0 +1,46 @@
|
||||
module.exports = {
|
||||
siteMetadata: {
|
||||
title: `Mind Expanding Books`,
|
||||
description: `Kick off your next, great Gatsby project with this default starter. This barebones starter ships with the main Gatsby configuration files you might need.`,
|
||||
author: `@gatsbyjs`,
|
||||
},
|
||||
plugins: [
|
||||
`gatsby-plugin-react-helmet`,
|
||||
{
|
||||
resolve: `gatsby-source-filesystem`,
|
||||
options: {
|
||||
name: `images`,
|
||||
path: `${__dirname}/src/images`,
|
||||
},
|
||||
},
|
||||
`gatsby-transformer-sharp`,
|
||||
`gatsby-plugin-sharp`,
|
||||
{
|
||||
resolve: `gatsby-plugin-manifest`,
|
||||
options: {
|
||||
name: `gatsby-starter-default`,
|
||||
short_name: `starter`,
|
||||
start_url: `/`,
|
||||
background_color: `#663399`,
|
||||
theme_color: `#663399`,
|
||||
display: `minimal-ui`,
|
||||
icon: `src/images/gatsby-icon.png`, // This path is relative to the root of the site.
|
||||
},
|
||||
},
|
||||
`gatsby-plugin-offline`,
|
||||
`gatsby-transformer-json`,
|
||||
{
|
||||
resolve: `gatsby-source-filesystem`,
|
||||
options: {
|
||||
path: `./src/data/`,
|
||||
},
|
||||
},
|
||||
`gatsby-plugin-postcss`,
|
||||
{
|
||||
resolve: `gatsby-plugin-google-analytics`,
|
||||
options: {
|
||||
trackingId: "UA-139957969-2",
|
||||
}
|
||||
}
|
||||
],
|
||||
}
|
||||
49
app/gatsby-node.js
Normal file
49
app/gatsby-node.js
Normal file
@@ -0,0 +1,49 @@
|
||||
const fs = require('fs');
|
||||
|
||||
const categories = JSON.parse(fs.readFileSync('src/data/categories.json'));
|
||||
const slugify = require('slugify');
|
||||
|
||||
exports.createPages = async function ({ actions, graphql }) {
|
||||
const { createPage } = actions;
|
||||
await Promise.all(
|
||||
categories.map(async (category) => {
|
||||
const data = await graphql(
|
||||
`
|
||||
query categoryBooksQuery($categoryName: String) {
|
||||
allBooksJson(
|
||||
filter: { category: { eq: $categoryName } }
|
||||
sort: { fields: [rating], order: DESC }
|
||||
) {
|
||||
edges {
|
||||
node {
|
||||
id
|
||||
title
|
||||
url
|
||||
rating
|
||||
author
|
||||
year
|
||||
category
|
||||
image_url
|
||||
description
|
||||
amazon_url
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
`,
|
||||
{ categoryName: category.name },
|
||||
);
|
||||
console.log(category.name, data.data);
|
||||
createPage({
|
||||
path: slugify(category.name),
|
||||
component: require.resolve('./src/templates/categoryTemplate.js'),
|
||||
context: {
|
||||
categoryName: category.name,
|
||||
data: data.data,
|
||||
image: category.emoji,
|
||||
limit: null,
|
||||
},
|
||||
});
|
||||
}),
|
||||
);
|
||||
};
|
||||
14
app/gatsby-ssr.js
Normal file
14
app/gatsby-ssr.js
Normal file
@@ -0,0 +1,14 @@
|
||||
/**
|
||||
* Implement Gatsby's SSR (Server Side Rendering) APIs in this file.
|
||||
*
|
||||
* See: https://www.gatsbyjs.org/docs/ssr-apis/
|
||||
*/
|
||||
|
||||
// You can delete this file if you're not using it
|
||||
import React from "react"
|
||||
|
||||
import GlobalState from "./src/context/globalState"
|
||||
|
||||
export const wrapRootElement = ({ element }) => (
|
||||
<GlobalState>{element}</GlobalState>
|
||||
)
|
||||
29267
app/package-lock.json
generated
Normal file
29267
app/package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load Diff
69
app/package.json
Normal file
69
app/package.json
Normal file
@@ -0,0 +1,69 @@
|
||||
{
|
||||
"name": "gatsby-starter-default",
|
||||
"private": true,
|
||||
"description": "A simple starter to get up and developing quickly with Gatsby",
|
||||
"version": "0.1.0",
|
||||
"author": "Kyle Mathews <mathews.kyle@gmail.com>",
|
||||
"dependencies": {
|
||||
"bootstrap": "^4.5.2",
|
||||
"gatsby": "^2.24.91",
|
||||
"gatsby-image": "^2.2.27",
|
||||
"gatsby-plugin-google-analytics": "^2.3.14",
|
||||
"gatsby-plugin-manifest": "^2.4.37",
|
||||
"gatsby-plugin-offline": "^3.0.14",
|
||||
"gatsby-plugin-postcss": "^2.1.11",
|
||||
"gatsby-plugin-react-helmet": "^3.1.11",
|
||||
"gatsby-plugin-sharp": "^2.6.43",
|
||||
"gatsby-source-filesystem": "^2.1.31",
|
||||
"gatsby-transformer-json": "^2.2.13",
|
||||
"gatsby-transformer-sharp": "^2.2.21",
|
||||
"prop-types": "^15.7.2",
|
||||
"react": "^16.10.2",
|
||||
"react-bootstrap": "^1.3.0",
|
||||
"react-dom": "^16.10.2",
|
||||
"react-helmet": "^5.2.1",
|
||||
"react-star-rating-component": "^1.4.1",
|
||||
"react-star-ratings": "^2.3.0",
|
||||
"slugify": "^1.4.5"
|
||||
},
|
||||
"devDependencies": {
|
||||
"eslint": "^7.7.0",
|
||||
"eslint-config-airbnb": "^18.2.0",
|
||||
"eslint-plugin-import": "^2.22.0",
|
||||
"eslint-plugin-jsx-a11y": "^6.3.1",
|
||||
"eslint-plugin-react": "^7.20.6",
|
||||
"eslint-plugin-react-hooks": "^4.1.0",
|
||||
"husky": "^4.3.0",
|
||||
"lint-staged": ">=10",
|
||||
"prettier": "1.19.1",
|
||||
"tailwindcss": "^1.1.2"
|
||||
},
|
||||
"keywords": [
|
||||
"gatsby"
|
||||
],
|
||||
"license": "MIT",
|
||||
"scripts": {
|
||||
"build": "gatsby build",
|
||||
"develop": "gatsby develop",
|
||||
"format": "prettier --write \"**/*.{js,jsx,json,md}\"",
|
||||
"start": "npm run develop",
|
||||
"serve": "gatsby serve",
|
||||
"test": "echo \"Write tests! -> https://gatsby.dev/unit-testing \""
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/gatsbyjs/gatsby-starter-default"
|
||||
},
|
||||
"bugs": {
|
||||
"url": "https://github.com/gatsbyjs/gatsby/issues"
|
||||
},
|
||||
"husky": {
|
||||
"hooks": {
|
||||
"pre-commit": "lint-staged"
|
||||
}
|
||||
},
|
||||
"lint-staged": {
|
||||
"*.{js,jsx,json,md}": "prettier --write",
|
||||
"*.js": "eslint --cache --fix"
|
||||
}
|
||||
}
|
||||
3
app/postcss.config.js
Normal file
3
app/postcss.config.js
Normal file
@@ -0,0 +1,3 @@
|
||||
module.exports = () => ({
|
||||
plugins: [require("tailwindcss")],
|
||||
})
|
||||
14
app/src/components/amazonurl.js
Normal file
14
app/src/components/amazonurl.js
Normal file
@@ -0,0 +1,14 @@
|
||||
import React from "react";
|
||||
import { OutboundLink } from "gatsby-plugin-google-analytics"
|
||||
|
||||
const getTargetURL = (book) => {
|
||||
return book.amazon_url + "?tag=vishnuks-20";
|
||||
}
|
||||
|
||||
export default ({ book }) => {
|
||||
return (
|
||||
<OutboundLink href={getTargetURL(book)} target="_blank" rel="noreferrer">
|
||||
<img alt="Amazon link" style={{ marginBottom: "-8px" }} src="https://img.icons8.com/color/48/000000/amazon.png"/>
|
||||
</OutboundLink>
|
||||
)
|
||||
}
|
||||
95
app/src/components/bookcard.js
Normal file
95
app/src/components/bookcard.js
Normal file
@@ -0,0 +1,95 @@
|
||||
import PropTypes from 'prop-types';
|
||||
import React, { useState } from 'react';
|
||||
import StarRatings from 'react-star-ratings';
|
||||
import { Card, Row, Col } from 'react-bootstrap';
|
||||
|
||||
import AmazonURL from '../components/amazonurl';
|
||||
import Bookmark from '../components/bookmark';
|
||||
import GoodReadsImage from '../components/goodreadsimage';
|
||||
|
||||
const truncateContent = (content) => {
|
||||
if (!content) {
|
||||
return '';
|
||||
}
|
||||
return content.length > 350 ? content.substring(0, 350) + '...' : content;
|
||||
};
|
||||
|
||||
const showFullText = (content) => {
|
||||
if (!content) {
|
||||
return '';
|
||||
}
|
||||
return content;
|
||||
};
|
||||
|
||||
const BookCard = ({ book }) => {
|
||||
const [ show, toggleShow ] = useState(false);
|
||||
return (
|
||||
<Card style={{ marginBottom: '15px' }}>
|
||||
<Row>
|
||||
<Col xs={6} sm={6} md={4} xl={2}>
|
||||
<Card.Img
|
||||
style={{
|
||||
paddingLeft: '15px',
|
||||
paddingRight: '15px',
|
||||
paddingTop: '30px'
|
||||
}}
|
||||
src={book.image_url}
|
||||
alt={book.title}
|
||||
/>
|
||||
</Col>
|
||||
<Col xs={12} sm={6} md={8} xl={10}>
|
||||
<Card.Body>
|
||||
<Card.Title>{book.title}</Card.Title>
|
||||
<Card.Subtitle className="text-muted">
|
||||
<Card.Text style={{ paddingTop: '2px' }}>
|
||||
{book.author} <b>{book.year ? book.year : null}</b>
|
||||
</Card.Text>
|
||||
<StarRatings
|
||||
rating={parseFloat(book.rating)}
|
||||
numberOfStars={5}
|
||||
starDimension="18px"
|
||||
starSpacing="1px"
|
||||
starRatedColor="#fa604a"
|
||||
/>
|
||||
<div style={{ display: 'flex', alignItems: 'center', paddingTop: '.75rem' }}>
|
||||
<div style={{ width: '30px', height: '30px', marginRight: '5px' }}>
|
||||
{book.amazon_url ? <AmazonURL book={book} /> : null}
|
||||
</div>
|
||||
<div style={{ width: '30px', height: '30px' }}>
|
||||
<a href={book.url} target="_blank">
|
||||
<GoodReadsImage />
|
||||
</a>
|
||||
</div>
|
||||
<Bookmark book={book} />
|
||||
</div>
|
||||
</Card.Subtitle>
|
||||
<p style={{ color: 'gray', fontSize: '0.8rem', paddingTop: '1rem' }}>
|
||||
{!show && truncateContent(book.description)}
|
||||
{show && showFullText(book.description)}
|
||||
</p>
|
||||
{!show && book.description.length>350 &&(
|
||||
<button className="btn btn-sm btn-primary " onClick={() => toggleShow(true)}>
|
||||
Show More
|
||||
</button>
|
||||
)}
|
||||
{show && (
|
||||
<button className="btn btn-sm btn-primary " onClick={() => toggleShow(false)}>
|
||||
Show Less
|
||||
</button>
|
||||
)}
|
||||
</Card.Body>
|
||||
</Col>
|
||||
</Row>
|
||||
</Card>
|
||||
);
|
||||
};
|
||||
|
||||
BookCard.propTypes = {
|
||||
siteTitle: PropTypes.object
|
||||
};
|
||||
|
||||
BookCard.defaultProps = {
|
||||
book: {}
|
||||
};
|
||||
|
||||
export default BookCard;
|
||||
26
app/src/components/bookmark.js
Normal file
26
app/src/components/bookmark.js
Normal file
@@ -0,0 +1,26 @@
|
||||
import React, { useContext } from 'react'
|
||||
import { Button } from "react-bootstrap"
|
||||
import { BookmarkContext } from '../context/globalState'
|
||||
|
||||
export default ({ book }) => {
|
||||
const { updateReadingList, readingList } = useContext(BookmarkContext)
|
||||
const readingListIds = readingList.bookIds
|
||||
|
||||
return (
|
||||
<div onClick={() => updateReadingList({ type: 'bookmark', retrievedBook: book })}>
|
||||
<Button style={{
|
||||
height: "30px",
|
||||
width: "30px",
|
||||
marginLeft: "0.25rem",
|
||||
display: "grid",
|
||||
justifyContent: "center",
|
||||
alignContent: "center" }}
|
||||
variant={ readingListIds.includes(book.id) ? "success" : "light"
|
||||
}>
|
||||
<span>
|
||||
🔖
|
||||
</span>
|
||||
</Button>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
12
app/src/components/categorydescription.js
Normal file
12
app/src/components/categorydescription.js
Normal file
@@ -0,0 +1,12 @@
|
||||
import React from "react";
|
||||
|
||||
|
||||
export default ({categoryName, categoryImage}) => {
|
||||
return (
|
||||
<div className="my-2 mx-2" aria-labelledby="category-description">
|
||||
<h4 id="category-description">
|
||||
{categoryImage} {categoryName}
|
||||
</h4>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
28
app/src/components/feed.js
Normal file
28
app/src/components/feed.js
Normal file
@@ -0,0 +1,28 @@
|
||||
import React from 'react';
|
||||
import '../styles/sidebar.css';
|
||||
import BookCard from './bookcard';
|
||||
import SortByDropdown, { FIELDS_TO_SORT_BY, compareFunctions } from './sortByDropdown';
|
||||
|
||||
export default ({ data, limit }) => {
|
||||
const [sortBy, setSortBy] = React.useState(FIELDS_TO_SORT_BY[0]);
|
||||
|
||||
const sortedBooks = React.useMemo(() => [...data.allBooksJson.edges]
|
||||
.sort(compareFunctions[sortBy.value]),
|
||||
[sortBy]);
|
||||
|
||||
return (
|
||||
<>
|
||||
<SortByDropdown sortBy={sortBy.label} onSortByItemClick={setSortBy} />
|
||||
{sortedBooks.map((x, index) => {
|
||||
const book = x.node;
|
||||
if (!limit || index < limit) {
|
||||
if (!book.description || book.description.length < 10) {
|
||||
return null;
|
||||
}
|
||||
return <BookCard book={book} key={book.id} />;
|
||||
}
|
||||
return null;
|
||||
})}
|
||||
</>
|
||||
);
|
||||
};
|
||||
32
app/src/components/goodreadsimage.js
Normal file
32
app/src/components/goodreadsimage.js
Normal file
@@ -0,0 +1,32 @@
|
||||
import React from "react"
|
||||
import { useStaticQuery, graphql } from "gatsby"
|
||||
import Img from "gatsby-image"
|
||||
|
||||
/*
|
||||
* This component is built using `gatsby-image` to automatically serve optimized
|
||||
* images with lazy loading and reduced file sizes. The image is loaded using a
|
||||
* `useStaticQuery`, which allows us to load the image from directly within this
|
||||
* component, rather than having to pass the image data down from pages.
|
||||
*
|
||||
* For more information, see the docs:
|
||||
* - `gatsby-image`: https://gatsby.dev/gatsby-image
|
||||
* - `useStaticQuery`: https://www.gatsbyjs.org/docs/use-static-query/
|
||||
*/
|
||||
|
||||
const Image = () => {
|
||||
const data = useStaticQuery(graphql`
|
||||
query {
|
||||
placeholderImage: file(relativePath: { eq: "goodreads.png" }) {
|
||||
childImageSharp {
|
||||
fluid(maxWidth: 30) {
|
||||
...GatsbyImageSharpFluid
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
`)
|
||||
|
||||
return <Img fluid={data.placeholderImage.childImageSharp.fluid} />
|
||||
}
|
||||
|
||||
export default Image
|
||||
28
app/src/components/header.js
Normal file
28
app/src/components/header.js
Normal file
@@ -0,0 +1,28 @@
|
||||
import { Link } from "gatsby"
|
||||
import PropTypes from "prop-types"
|
||||
import React from "react"
|
||||
|
||||
const Header = ({ siteTitle }) => (
|
||||
<header className="mx-2 bg-red d-none d-lg-block custom-header" aria-labelledby='main-title'>
|
||||
<h4 className="d-flex justify-content-end" id="main-title" style={{ margin: 16 }}>
|
||||
<Link
|
||||
to="/"
|
||||
style={{
|
||||
textDecorationColor: `none`,
|
||||
}}
|
||||
>
|
||||
{siteTitle}
|
||||
</Link>
|
||||
</h4>
|
||||
</header>
|
||||
)
|
||||
|
||||
Header.propTypes = {
|
||||
siteTitle: PropTypes.string,
|
||||
}
|
||||
|
||||
Header.defaultProps = {
|
||||
siteTitle: ``,
|
||||
}
|
||||
|
||||
export default Header
|
||||
32
app/src/components/image.js
Normal file
32
app/src/components/image.js
Normal file
@@ -0,0 +1,32 @@
|
||||
import React from "react"
|
||||
import { useStaticQuery, graphql } from "gatsby"
|
||||
import Img from "gatsby-image"
|
||||
|
||||
/*
|
||||
* This component is built using `gatsby-image` to automatically serve optimized
|
||||
* images with lazy loading and reduced file sizes. The image is loaded using a
|
||||
* `useStaticQuery`, which allows us to load the image from directly within this
|
||||
* component, rather than having to pass the image data down from pages.
|
||||
*
|
||||
* For more information, see the docs:
|
||||
* - `gatsby-image`: https://gatsby.dev/gatsby-image
|
||||
* - `useStaticQuery`: https://www.gatsbyjs.org/docs/use-static-query/
|
||||
*/
|
||||
|
||||
const Image = () => {
|
||||
const data = useStaticQuery(graphql`
|
||||
query {
|
||||
placeholderImage: file(relativePath: { eq: "gatsby-astronaut.png" }) {
|
||||
childImageSharp {
|
||||
fluid(maxWidth: 300) {
|
||||
...GatsbyImageSharpFluid
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
`)
|
||||
|
||||
return <Img fluid={data.placeholderImage.childImageSharp.fluid} />
|
||||
}
|
||||
|
||||
export default Image
|
||||
622
app/src/components/layout.css
Normal file
622
app/src/components/layout.css
Normal file
@@ -0,0 +1,622 @@
|
||||
html {
|
||||
font-family: sans-serif;
|
||||
-ms-text-size-adjust: 100%;
|
||||
-webkit-text-size-adjust: 100%;
|
||||
}
|
||||
body {
|
||||
margin: 0;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
}
|
||||
article,
|
||||
aside,
|
||||
details,
|
||||
figcaption,
|
||||
figure,
|
||||
footer,
|
||||
header,
|
||||
main,
|
||||
menu,
|
||||
nav,
|
||||
section,
|
||||
summary {
|
||||
display: block;
|
||||
}
|
||||
audio,
|
||||
canvas,
|
||||
progress,
|
||||
video {
|
||||
display: inline-block;
|
||||
}
|
||||
audio:not([controls]) {
|
||||
display: none;
|
||||
height: 0;
|
||||
}
|
||||
progress {
|
||||
vertical-align: baseline;
|
||||
}
|
||||
[hidden],
|
||||
template {
|
||||
display: none;
|
||||
}
|
||||
a {
|
||||
background-color: transparent;
|
||||
-webkit-text-decoration-skip: objects;
|
||||
}
|
||||
a:active,
|
||||
a:hover {
|
||||
outline-width: 0;
|
||||
}
|
||||
abbr[title] {
|
||||
border-bottom: none;
|
||||
text-decoration: underline;
|
||||
text-decoration: underline dotted;
|
||||
}
|
||||
b,
|
||||
strong {
|
||||
font-weight: inherit;
|
||||
font-weight: bolder;
|
||||
}
|
||||
dfn {
|
||||
font-style: italic;
|
||||
}
|
||||
h1 {
|
||||
font-size: 2em;
|
||||
margin: 0.67em 0;
|
||||
}
|
||||
mark {
|
||||
background-color: #ff0;
|
||||
color: #000;
|
||||
}
|
||||
small {
|
||||
font-size: 80%;
|
||||
}
|
||||
sub,
|
||||
sup {
|
||||
font-size: 75%;
|
||||
line-height: 0;
|
||||
position: relative;
|
||||
vertical-align: baseline;
|
||||
}
|
||||
sub {
|
||||
bottom: -0.25em;
|
||||
}
|
||||
sup {
|
||||
top: -0.5em;
|
||||
}
|
||||
img {
|
||||
border-style: none;
|
||||
}
|
||||
svg:not(:root) {
|
||||
overflow: hidden;
|
||||
}
|
||||
code,
|
||||
kbd,
|
||||
pre,
|
||||
samp {
|
||||
font-family: monospace, monospace;
|
||||
font-size: 1em;
|
||||
}
|
||||
figure {
|
||||
margin: 1em 40px;
|
||||
}
|
||||
hr {
|
||||
box-sizing: content-box;
|
||||
height: 0;
|
||||
overflow: visible;
|
||||
}
|
||||
button,
|
||||
input,
|
||||
optgroup,
|
||||
select,
|
||||
textarea {
|
||||
font: inherit;
|
||||
margin: 0;
|
||||
}
|
||||
optgroup {
|
||||
font-weight: 700;
|
||||
}
|
||||
button,
|
||||
input {
|
||||
overflow: visible;
|
||||
}
|
||||
button,
|
||||
select {
|
||||
text-transform: none;
|
||||
}
|
||||
[type="reset"],
|
||||
[type="submit"],
|
||||
button,
|
||||
html [type="button"] {
|
||||
-webkit-appearance: button;
|
||||
}
|
||||
[type="button"]::-moz-focus-inner,
|
||||
[type="reset"]::-moz-focus-inner,
|
||||
[type="submit"]::-moz-focus-inner,
|
||||
button::-moz-focus-inner {
|
||||
border-style: none;
|
||||
padding: 0;
|
||||
}
|
||||
[type="button"]:-moz-focusring,
|
||||
[type="reset"]:-moz-focusring,
|
||||
[type="submit"]:-moz-focusring,
|
||||
button:-moz-focusring {
|
||||
outline: 1px dotted ButtonText;
|
||||
}
|
||||
fieldset {
|
||||
border: 1px solid silver;
|
||||
margin: 0 2px;
|
||||
padding: 0.35em 0.625em 0.75em;
|
||||
}
|
||||
legend {
|
||||
box-sizing: border-box;
|
||||
color: inherit;
|
||||
display: table;
|
||||
max-width: 100%;
|
||||
padding: 0;
|
||||
white-space: normal;
|
||||
}
|
||||
textarea {
|
||||
overflow: auto;
|
||||
}
|
||||
[type="checkbox"],
|
||||
[type="radio"] {
|
||||
box-sizing: border-box;
|
||||
padding: 0;
|
||||
}
|
||||
[type="number"]::-webkit-inner-spin-button,
|
||||
[type="number"]::-webkit-outer-spin-button {
|
||||
height: auto;
|
||||
}
|
||||
[type="search"] {
|
||||
-webkit-appearance: textfield;
|
||||
outline-offset: -2px;
|
||||
}
|
||||
[type="search"]::-webkit-search-cancel-button,
|
||||
[type="search"]::-webkit-search-decoration {
|
||||
-webkit-appearance: none;
|
||||
}
|
||||
::-webkit-input-placeholder {
|
||||
color: inherit;
|
||||
opacity: 0.54;
|
||||
}
|
||||
::-webkit-file-upload-button {
|
||||
-webkit-appearance: button;
|
||||
font: inherit;
|
||||
}
|
||||
html {
|
||||
font: 112.5%/1.45em georgia, serif;
|
||||
box-sizing: border-box;
|
||||
overflow-y: scroll;
|
||||
}
|
||||
* {
|
||||
box-sizing: inherit;
|
||||
}
|
||||
*:before {
|
||||
box-sizing: inherit;
|
||||
}
|
||||
*:after {
|
||||
box-sizing: inherit;
|
||||
}
|
||||
body {
|
||||
color: hsla(0, 0%, 0%, 0.8);
|
||||
font-family: georgia, serif;
|
||||
font-weight: normal;
|
||||
word-wrap: break-word;
|
||||
font-kerning: normal;
|
||||
-moz-font-feature-settings: "kern", "liga", "clig", "calt";
|
||||
-ms-font-feature-settings: "kern", "liga", "clig", "calt";
|
||||
-webkit-font-feature-settings: "kern", "liga", "clig", "calt";
|
||||
font-feature-settings: "kern", "liga", "clig", "calt";
|
||||
}
|
||||
img {
|
||||
max-width: 100%;
|
||||
margin-left: 0;
|
||||
margin-right: 0;
|
||||
margin-top: 0;
|
||||
padding-bottom: 0;
|
||||
padding-left: 0;
|
||||
padding-right: 0;
|
||||
padding-top: 0;
|
||||
margin-bottom: 1.45rem;
|
||||
}
|
||||
h1 {
|
||||
margin-left: 0;
|
||||
margin-right: 0;
|
||||
margin-top: 0;
|
||||
padding-bottom: 0;
|
||||
padding-left: 0;
|
||||
padding-right: 0;
|
||||
padding-top: 0;
|
||||
margin-bottom: 1.45rem;
|
||||
color: inherit;
|
||||
font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen,
|
||||
Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif;
|
||||
font-weight: bold;
|
||||
text-rendering: optimizeLegibility;
|
||||
font-size: 2.25rem;
|
||||
line-height: 1.1;
|
||||
}
|
||||
h2 {
|
||||
margin-left: 0;
|
||||
margin-right: 0;
|
||||
margin-top: 0;
|
||||
padding-bottom: 0;
|
||||
padding-left: 0;
|
||||
padding-right: 0;
|
||||
padding-top: 0;
|
||||
margin-bottom: 1.45rem;
|
||||
color: inherit;
|
||||
font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen,
|
||||
Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif;
|
||||
font-weight: bold;
|
||||
text-rendering: optimizeLegibility;
|
||||
font-size: 1.62671rem;
|
||||
line-height: 1.1;
|
||||
}
|
||||
h3 {
|
||||
margin-left: 0;
|
||||
margin-right: 0;
|
||||
margin-top: 0;
|
||||
padding-bottom: 0;
|
||||
padding-left: 0;
|
||||
padding-right: 0;
|
||||
padding-top: 0;
|
||||
margin-bottom: 1.45rem;
|
||||
color: inherit;
|
||||
font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen,
|
||||
Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif;
|
||||
font-weight: bold;
|
||||
text-rendering: optimizeLegibility;
|
||||
font-size: 1.38316rem;
|
||||
line-height: 1.1;
|
||||
}
|
||||
h4 {
|
||||
margin-left: 0;
|
||||
margin-right: 0;
|
||||
margin-top: 0;
|
||||
padding-bottom: 0;
|
||||
padding-left: 0;
|
||||
padding-right: 0;
|
||||
padding-top: 0;
|
||||
margin-bottom: 1.45rem;
|
||||
color: inherit;
|
||||
font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen,
|
||||
Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif;
|
||||
font-weight: bold;
|
||||
text-rendering: optimizeLegibility;
|
||||
font-size: 1rem;
|
||||
line-height: 1.1;
|
||||
}
|
||||
h5 {
|
||||
margin-left: 0;
|
||||
margin-right: 0;
|
||||
margin-top: 0;
|
||||
padding-bottom: 0;
|
||||
padding-left: 0;
|
||||
padding-right: 0;
|
||||
padding-top: 0;
|
||||
margin-bottom: 1.45rem;
|
||||
color: inherit;
|
||||
font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen,
|
||||
Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif;
|
||||
font-weight: bold;
|
||||
text-rendering: optimizeLegibility;
|
||||
font-size: 0.85028rem;
|
||||
line-height: 1.1;
|
||||
}
|
||||
h6 {
|
||||
margin-left: 0;
|
||||
margin-right: 0;
|
||||
margin-top: 0;
|
||||
padding-bottom: 0;
|
||||
padding-left: 0;
|
||||
padding-right: 0;
|
||||
padding-top: 0;
|
||||
margin-bottom: 1.45rem;
|
||||
color: inherit;
|
||||
font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen,
|
||||
Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif;
|
||||
font-weight: bold;
|
||||
text-rendering: optimizeLegibility;
|
||||
font-size: 0.78405rem;
|
||||
line-height: 1.1;
|
||||
}
|
||||
hgroup {
|
||||
margin-left: 0;
|
||||
margin-right: 0;
|
||||
margin-top: 0;
|
||||
padding-bottom: 0;
|
||||
padding-left: 0;
|
||||
padding-right: 0;
|
||||
padding-top: 0;
|
||||
margin-bottom: 1.45rem;
|
||||
}
|
||||
ul {
|
||||
margin-left: 1.45rem;
|
||||
margin-right: 0;
|
||||
margin-top: 0;
|
||||
padding-bottom: 0;
|
||||
padding-left: 0;
|
||||
padding-right: 0;
|
||||
padding-top: 0;
|
||||
margin-bottom: 1.45rem;
|
||||
list-style-position: outside;
|
||||
list-style-image: none;
|
||||
}
|
||||
ol {
|
||||
margin-left: 1.45rem;
|
||||
margin-right: 0;
|
||||
margin-top: 0;
|
||||
padding-bottom: 0;
|
||||
padding-left: 0;
|
||||
padding-right: 0;
|
||||
padding-top: 0;
|
||||
margin-bottom: 1.45rem;
|
||||
list-style-position: outside;
|
||||
list-style-image: none;
|
||||
}
|
||||
dl {
|
||||
margin-left: 0;
|
||||
margin-right: 0;
|
||||
margin-top: 0;
|
||||
padding-bottom: 0;
|
||||
padding-left: 0;
|
||||
padding-right: 0;
|
||||
padding-top: 0;
|
||||
margin-bottom: 1.45rem;
|
||||
}
|
||||
dd {
|
||||
margin-left: 0;
|
||||
margin-right: 0;
|
||||
margin-top: 0;
|
||||
padding-bottom: 0;
|
||||
padding-left: 0;
|
||||
padding-right: 0;
|
||||
padding-top: 0;
|
||||
margin-bottom: 1.45rem;
|
||||
}
|
||||
p {
|
||||
margin-left: 0;
|
||||
margin-right: 0;
|
||||
margin-top: 0;
|
||||
padding-bottom: 0;
|
||||
padding-left: 0;
|
||||
padding-right: 0;
|
||||
padding-top: 0;
|
||||
margin-bottom: 1.45rem;
|
||||
}
|
||||
figure {
|
||||
margin-left: 0;
|
||||
margin-right: 0;
|
||||
margin-top: 0;
|
||||
padding-bottom: 0;
|
||||
padding-left: 0;
|
||||
padding-right: 0;
|
||||
padding-top: 0;
|
||||
margin-bottom: 1.45rem;
|
||||
}
|
||||
pre {
|
||||
margin-left: 0;
|
||||
margin-right: 0;
|
||||
margin-top: 0;
|
||||
margin-bottom: 1.45rem;
|
||||
font-size: 0.85rem;
|
||||
line-height: 1.42;
|
||||
background: hsla(0, 0%, 0%, 0.04);
|
||||
border-radius: 3px;
|
||||
overflow: auto;
|
||||
word-wrap: normal;
|
||||
padding: 1.45rem;
|
||||
}
|
||||
table {
|
||||
margin-left: 0;
|
||||
margin-right: 0;
|
||||
margin-top: 0;
|
||||
padding-bottom: 0;
|
||||
padding-left: 0;
|
||||
padding-right: 0;
|
||||
padding-top: 0;
|
||||
margin-bottom: 1.45rem;
|
||||
font-size: 1rem;
|
||||
line-height: 1.45rem;
|
||||
border-collapse: collapse;
|
||||
width: 100%;
|
||||
}
|
||||
fieldset {
|
||||
margin-left: 0;
|
||||
margin-right: 0;
|
||||
margin-top: 0;
|
||||
padding-bottom: 0;
|
||||
padding-left: 0;
|
||||
padding-right: 0;
|
||||
padding-top: 0;
|
||||
margin-bottom: 1.45rem;
|
||||
}
|
||||
blockquote {
|
||||
margin-left: 1.45rem;
|
||||
margin-right: 1.45rem;
|
||||
margin-top: 0;
|
||||
padding-bottom: 0;
|
||||
padding-left: 0;
|
||||
padding-right: 0;
|
||||
padding-top: 0;
|
||||
margin-bottom: 1.45rem;
|
||||
}
|
||||
form {
|
||||
margin-left: 0;
|
||||
margin-right: 0;
|
||||
margin-top: 0;
|
||||
padding-bottom: 0;
|
||||
padding-left: 0;
|
||||
padding-right: 0;
|
||||
padding-top: 0;
|
||||
margin-bottom: 1.45rem;
|
||||
}
|
||||
noscript {
|
||||
margin-left: 0;
|
||||
margin-right: 0;
|
||||
margin-top: 0;
|
||||
padding-bottom: 0;
|
||||
padding-left: 0;
|
||||
padding-right: 0;
|
||||
padding-top: 0;
|
||||
margin-bottom: 1.45rem;
|
||||
}
|
||||
iframe {
|
||||
margin-left: 0;
|
||||
margin-right: 0;
|
||||
margin-top: 0;
|
||||
padding-bottom: 0;
|
||||
padding-left: 0;
|
||||
padding-right: 0;
|
||||
padding-top: 0;
|
||||
margin-bottom: 1.45rem;
|
||||
}
|
||||
hr {
|
||||
margin-left: 0;
|
||||
margin-right: 0;
|
||||
margin-top: 0;
|
||||
padding-bottom: 0;
|
||||
padding-left: 0;
|
||||
padding-right: 0;
|
||||
padding-top: 0;
|
||||
margin-bottom: calc(1.45rem - 1px);
|
||||
background: hsla(0, 0%, 0%, 0.2);
|
||||
border: none;
|
||||
height: 1px;
|
||||
}
|
||||
address {
|
||||
margin-left: 0;
|
||||
margin-right: 0;
|
||||
margin-top: 0;
|
||||
padding-bottom: 0;
|
||||
padding-left: 0;
|
||||
padding-right: 0;
|
||||
padding-top: 0;
|
||||
margin-bottom: 1.45rem;
|
||||
}
|
||||
b {
|
||||
font-weight: bold;
|
||||
}
|
||||
strong {
|
||||
font-weight: bold;
|
||||
}
|
||||
dt {
|
||||
font-weight: bold;
|
||||
}
|
||||
th {
|
||||
font-weight: bold;
|
||||
}
|
||||
li {
|
||||
margin-bottom: calc(1.45rem / 2);
|
||||
}
|
||||
ol li {
|
||||
padding-left: 0;
|
||||
}
|
||||
ul li {
|
||||
padding-left: 0;
|
||||
}
|
||||
li > ol {
|
||||
margin-left: 1.45rem;
|
||||
margin-bottom: calc(1.45rem / 2);
|
||||
margin-top: calc(1.45rem / 2);
|
||||
}
|
||||
li > ul {
|
||||
margin-left: 1.45rem;
|
||||
margin-bottom: calc(1.45rem / 2);
|
||||
margin-top: calc(1.45rem / 2);
|
||||
}
|
||||
blockquote *:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
li *:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
p *:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
li > p {
|
||||
margin-bottom: calc(1.45rem / 2);
|
||||
}
|
||||
code {
|
||||
font-size: 0.85rem;
|
||||
line-height: 1.45rem;
|
||||
}
|
||||
kbd {
|
||||
font-size: 0.85rem;
|
||||
line-height: 1.45rem;
|
||||
}
|
||||
samp {
|
||||
font-size: 0.85rem;
|
||||
line-height: 1.45rem;
|
||||
}
|
||||
abbr {
|
||||
border-bottom: 1px dotted hsla(0, 0%, 0%, 0.5);
|
||||
cursor: help;
|
||||
}
|
||||
acronym {
|
||||
border-bottom: 1px dotted hsla(0, 0%, 0%, 0.5);
|
||||
cursor: help;
|
||||
}
|
||||
abbr[title] {
|
||||
border-bottom: 1px dotted hsla(0, 0%, 0%, 0.5);
|
||||
cursor: help;
|
||||
text-decoration: none;
|
||||
}
|
||||
thead {
|
||||
text-align: left;
|
||||
}
|
||||
td,
|
||||
th {
|
||||
text-align: left;
|
||||
border-bottom: 1px solid hsla(0, 0%, 0%, 0.12);
|
||||
font-feature-settings: "tnum";
|
||||
-moz-font-feature-settings: "tnum";
|
||||
-ms-font-feature-settings: "tnum";
|
||||
-webkit-font-feature-settings: "tnum";
|
||||
padding-left: 0.96667rem;
|
||||
padding-right: 0.96667rem;
|
||||
padding-top: 0.725rem;
|
||||
padding-bottom: calc(0.725rem - 1px);
|
||||
}
|
||||
th:first-child,
|
||||
td:first-child {
|
||||
padding-left: 0;
|
||||
}
|
||||
th:last-child,
|
||||
td:last-child {
|
||||
padding-right: 0;
|
||||
}
|
||||
tt,
|
||||
code {
|
||||
background-color: hsla(0, 0%, 0%, 0.04);
|
||||
border-radius: 3px;
|
||||
font-family: "SFMono-Regular", Consolas, "Roboto Mono", "Droid Sans Mono",
|
||||
"Liberation Mono", Menlo, Courier, monospace;
|
||||
padding: 0;
|
||||
padding-top: 0.2em;
|
||||
padding-bottom: 0.2em;
|
||||
}
|
||||
pre code {
|
||||
background: none;
|
||||
line-height: 1.42;
|
||||
}
|
||||
code:before,
|
||||
code:after,
|
||||
tt:before,
|
||||
tt:after {
|
||||
letter-spacing: -0.2em;
|
||||
content: " ";
|
||||
}
|
||||
pre code:before,
|
||||
pre code:after,
|
||||
pre tt:before,
|
||||
pre tt:after {
|
||||
content: "";
|
||||
}
|
||||
@media only screen and (max-width: 480px) {
|
||||
html {
|
||||
font-size: 100%;
|
||||
}
|
||||
}
|
||||
47
app/src/components/layout.js
Normal file
47
app/src/components/layout.js
Normal file
@@ -0,0 +1,47 @@
|
||||
/**
|
||||
* Layout component that queries for data
|
||||
* with Gatsby's useStaticQuery component
|
||||
*
|
||||
* See: https://www.gatsbyjs.org/docs/use-static-query/
|
||||
*/
|
||||
|
||||
import React from "react"
|
||||
import PropTypes from "prop-types"
|
||||
import { useStaticQuery, graphql } from "gatsby"
|
||||
|
||||
import Header from "./header"
|
||||
import "./layout.css"
|
||||
import "bootstrap/dist/css/bootstrap.min.css"
|
||||
import { Container } from "react-bootstrap"
|
||||
|
||||
const Layout = ({ children }) => {
|
||||
const data = useStaticQuery(graphql`
|
||||
query SiteTitleQuery {
|
||||
site {
|
||||
siteMetadata {
|
||||
title
|
||||
}
|
||||
}
|
||||
}
|
||||
`)
|
||||
|
||||
return (
|
||||
<>
|
||||
<Header siteTitle={data.site.siteMetadata.title} />
|
||||
<Container fluid>
|
||||
<main>{children}</main>
|
||||
<footer class ="footer-text">
|
||||
© {new Date().getFullYear()}, Built with
|
||||
{` `}
|
||||
<a href="https://www.gatsbyjs.org">Gatsby</a>
|
||||
</footer>
|
||||
</Container>
|
||||
</>
|
||||
)
|
||||
}
|
||||
|
||||
Layout.propTypes = {
|
||||
children: PropTypes.node.isRequired,
|
||||
}
|
||||
|
||||
export default Layout
|
||||
88
app/src/components/seo.js
Normal file
88
app/src/components/seo.js
Normal file
@@ -0,0 +1,88 @@
|
||||
/**
|
||||
* SEO component that queries for data with
|
||||
* Gatsby's useStaticQuery React hook
|
||||
*
|
||||
* See: https://www.gatsbyjs.org/docs/use-static-query/
|
||||
*/
|
||||
|
||||
import React from "react"
|
||||
import PropTypes from "prop-types"
|
||||
import Helmet from "react-helmet"
|
||||
import { useStaticQuery, graphql } from "gatsby"
|
||||
|
||||
function SEO({ description, lang, meta, title }) {
|
||||
const { site } = useStaticQuery(
|
||||
graphql`
|
||||
query {
|
||||
site {
|
||||
siteMetadata {
|
||||
title
|
||||
description
|
||||
author
|
||||
}
|
||||
}
|
||||
}
|
||||
`
|
||||
)
|
||||
|
||||
const metaDescription = description || site.siteMetadata.description
|
||||
|
||||
return (
|
||||
<Helmet
|
||||
htmlAttributes={{
|
||||
lang,
|
||||
}}
|
||||
title={title}
|
||||
titleTemplate={`%s | ${site.siteMetadata.title}`}
|
||||
meta={[
|
||||
{
|
||||
name: `description`,
|
||||
content: metaDescription,
|
||||
},
|
||||
{
|
||||
property: `og:title`,
|
||||
content: title,
|
||||
},
|
||||
{
|
||||
property: `og:description`,
|
||||
content: metaDescription,
|
||||
},
|
||||
{
|
||||
property: `og:type`,
|
||||
content: `website`,
|
||||
},
|
||||
{
|
||||
name: `twitter:card`,
|
||||
content: `summary`,
|
||||
},
|
||||
{
|
||||
name: `twitter:creator`,
|
||||
content: site.siteMetadata.author,
|
||||
},
|
||||
{
|
||||
name: `twitter:title`,
|
||||
content: title,
|
||||
},
|
||||
{
|
||||
name: `twitter:description`,
|
||||
content: metaDescription,
|
||||
},
|
||||
].concat(meta)}
|
||||
/>
|
||||
)
|
||||
}
|
||||
|
||||
SEO.defaultProps = {
|
||||
lang: `en`,
|
||||
meta: [],
|
||||
description: ``,
|
||||
}
|
||||
|
||||
SEO.propTypes = {
|
||||
description: PropTypes.string,
|
||||
lang: PropTypes.string,
|
||||
meta: PropTypes.arrayOf(PropTypes.object),
|
||||
title: PropTypes.string.isRequired,
|
||||
}
|
||||
|
||||
export default SEO
|
||||
49
app/src/components/sidebar.js
Normal file
49
app/src/components/sidebar.js
Normal file
@@ -0,0 +1,49 @@
|
||||
import React, { useContext } from "react"
|
||||
import { Navbar, Nav } from "react-bootstrap"
|
||||
import { StaticQuery, graphql, Link } from "gatsby"
|
||||
import "../styles/sidebar.css"
|
||||
import { BookmarkContext } from '../context/globalState'
|
||||
var slugify = require('slugify')
|
||||
|
||||
export default () => {
|
||||
const { readingList } = useContext(BookmarkContext)
|
||||
|
||||
return (
|
||||
<StaticQuery
|
||||
query={graphql`
|
||||
query CategoryQuery {
|
||||
allCategoriesJson {
|
||||
edges {
|
||||
node {
|
||||
id
|
||||
name
|
||||
emoji
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
`}
|
||||
render={data => (
|
||||
<Navbar className="sidebar-sticky" collapseOnSelect expand="lg" bg="ligt" variant="light">
|
||||
<Navbar.Toggle aria-controls="responsive-navbar-nav" />
|
||||
<Navbar.Collapse>
|
||||
<div>
|
||||
<div style={{position: "relative", left: "0.9rem", paddingBottom: "0.2rem"}}>
|
||||
<Link to="/readingList">🔖 Reading List ({readingList.bookIds.length})</Link>
|
||||
</div>
|
||||
{data.allCategoriesJson.edges.map(function(x, index) {
|
||||
return (
|
||||
<Nav.Item key={index}>
|
||||
<Nav.Link href={slugify(x.node.name)}>
|
||||
{x.node.emoji} {x.node.name}
|
||||
</Nav.Link>
|
||||
</Nav.Item>
|
||||
)
|
||||
})}
|
||||
</div>
|
||||
</Navbar.Collapse>
|
||||
</Navbar>
|
||||
)}
|
||||
/>
|
||||
)
|
||||
}
|
||||
40
app/src/components/sortByDropdown.js
Normal file
40
app/src/components/sortByDropdown.js
Normal file
@@ -0,0 +1,40 @@
|
||||
import React from 'react';
|
||||
import { Dropdown } from 'react-bootstrap';
|
||||
|
||||
export const compareFunctions = {
|
||||
title_a_z: ({ node: bookOne }, { node: bookTwo }) => bookOne.title.localeCompare(bookTwo.title),
|
||||
title_z_a: ({ node: bookOne }, { node: bookTwo }) => bookTwo.title.localeCompare(bookOne.title),
|
||||
year_descending: ({ node: bookOne }, { node: bookTwo }) => Number(bookTwo.year) - Number(bookOne.year),
|
||||
year_ascending: ({ node: bookOne }, { node: bookTwo }) => Number(bookOne.year) - Number(bookTwo.year),
|
||||
rating_descending: ({ node: bookOne }, { node: bookTwo }) => Number(bookTwo.rating) - Number(bookOne.rating),
|
||||
rating_ascending: ({ node: bookOne }, { node: bookTwo }) => Number(bookOne.rating) - Number(bookTwo.rating),
|
||||
};
|
||||
|
||||
export const FIELDS_TO_SORT_BY = [
|
||||
{ label: 'Rating, high to low', value: 'rating_descending' },
|
||||
{ label: 'Rating, low to high', value: 'rating_ascending' },
|
||||
{ label: 'Publication year, new to old', value: 'year_descending' },
|
||||
{ label: 'Publication year, old to new', value: 'year_ascending' },
|
||||
{ label: 'Title, A-Z', value: 'title_a_z' },
|
||||
{ label: 'Title, Z-A', value: 'title_z_a' },
|
||||
];
|
||||
|
||||
export default ({ sortBy, onSortByItemClick }) => (
|
||||
<div className="mb-2">
|
||||
<Dropdown>
|
||||
<Dropdown.Toggle variant="outline">
|
||||
Sort By:
|
||||
{' '}
|
||||
{sortBy}
|
||||
</Dropdown.Toggle>
|
||||
|
||||
<Dropdown.Menu>
|
||||
{FIELDS_TO_SORT_BY.map((field, index) => (
|
||||
<Dropdown.Item key={index} onClick={() => onSortByItemClick(field)}>
|
||||
{field.label}
|
||||
</Dropdown.Item>
|
||||
))}
|
||||
</Dropdown.Menu>
|
||||
</Dropdown>
|
||||
</div>
|
||||
);
|
||||
33
app/src/context/bookReducer.js
Normal file
33
app/src/context/bookReducer.js
Normal file
@@ -0,0 +1,33 @@
|
||||
export default function bookReducer(state, action) {
|
||||
let readingListCopy = {...state}
|
||||
|
||||
switch (action.type) {
|
||||
case 'init': {
|
||||
if (action.content) {
|
||||
return action.content
|
||||
}
|
||||
return readingListCopy
|
||||
}
|
||||
case 'bookmark': {
|
||||
let { bookIds, books } = readingListCopy
|
||||
const { retrievedBook } = action
|
||||
const retrievedBookId = retrievedBook.id
|
||||
// Delete existing bookmark
|
||||
if (bookIds.includes(retrievedBookId)) {
|
||||
readingListCopy.bookIds = bookIds.filter(id => id !== retrievedBookId)
|
||||
delete books[retrievedBookId]
|
||||
if (typeof window !== undefined) {
|
||||
localStorage.setItem('Bookmarks', JSON.stringify(readingListCopy))
|
||||
}
|
||||
// Add new bookmark
|
||||
} else {
|
||||
books[retrievedBookId] = retrievedBook
|
||||
bookIds.push(retrievedBookId)
|
||||
if (typeof window !== undefined) {
|
||||
localStorage.setItem('Bookmarks', JSON.stringify(readingListCopy))
|
||||
}
|
||||
}
|
||||
return readingListCopy
|
||||
}
|
||||
}
|
||||
}
|
||||
25
app/src/context/globalState.js
Normal file
25
app/src/context/globalState.js
Normal file
@@ -0,0 +1,25 @@
|
||||
import React, { useReducer, useEffect } from 'react'
|
||||
import bookReducer from './bookReducer'
|
||||
|
||||
export const BookmarkContext = React.createContext()
|
||||
|
||||
export default function GlobalState({children}) {
|
||||
let [readingList, updateReadingList] = useReducer(bookReducer, {
|
||||
books: {},
|
||||
bookIds: []
|
||||
})
|
||||
|
||||
useEffect(() => {
|
||||
if (typeof window !== undefined) {
|
||||
const retrievedBooks = JSON.parse(localStorage.getItem('Bookmarks'))
|
||||
console.log(retrievedBooks)
|
||||
updateReadingList({type: 'init', content: retrievedBooks})
|
||||
}
|
||||
}, [])
|
||||
|
||||
return (
|
||||
<BookmarkContext.Provider value={{readingList, updateReadingList}}>
|
||||
{children}
|
||||
</BookmarkContext.Provider>
|
||||
)
|
||||
}
|
||||
5728
app/src/data/books.json
Normal file
5728
app/src/data/books.json
Normal file
File diff suppressed because it is too large
Load Diff
74
app/src/data/categories.json
Normal file
74
app/src/data/categories.json
Normal file
@@ -0,0 +1,74 @@
|
||||
[
|
||||
{
|
||||
"name": "Startups and Business",
|
||||
"emoji": "🚀"
|
||||
},
|
||||
{
|
||||
"name": "Philosophy And Psychology",
|
||||
"emoji": "☯️"
|
||||
},
|
||||
{
|
||||
"name": "Autobiographies and Biographies",
|
||||
"emoji": "👩🏾"
|
||||
},
|
||||
{
|
||||
"name": "History",
|
||||
"emoji": "📜"
|
||||
},
|
||||
{
|
||||
"name": "Science and Medicine",
|
||||
"emoji": "🔬"
|
||||
},
|
||||
{
|
||||
"name": "Logic and Problem Solving",
|
||||
"emoji": "🧩"
|
||||
},
|
||||
{
|
||||
"name": "Politics",
|
||||
"emoji": "🗳️"
|
||||
},
|
||||
{
|
||||
"name": "Economics",
|
||||
"emoji": "📈"
|
||||
},
|
||||
{
|
||||
"name": "Gender",
|
||||
"emoji": "🏳️🌈"
|
||||
},
|
||||
{
|
||||
"name": "Sexuality",
|
||||
"emoji": "😘"
|
||||
},
|
||||
{
|
||||
"name": "Education",
|
||||
"emoji": "🏫"
|
||||
},
|
||||
{
|
||||
"name": "Writing",
|
||||
"emoji": "📝"
|
||||
},
|
||||
{
|
||||
"name": "Theater and Film",
|
||||
"emoji": "🎬"
|
||||
},
|
||||
{
|
||||
"name": "Health",
|
||||
"emoji": "👩⚕️"
|
||||
},
|
||||
{
|
||||
"name": "Travel",
|
||||
"emoji": "🛩️"
|
||||
},
|
||||
{
|
||||
"name": "Language",
|
||||
"emoji": "🉐"
|
||||
},
|
||||
{
|
||||
"name": "Nature",
|
||||
"emoji": "🌲"
|
||||
},
|
||||
{
|
||||
"name": "Art",
|
||||
"emoji": "🖌️"
|
||||
}
|
||||
]
|
||||
BIN
app/src/images/amazon.png
Normal file
BIN
app/src/images/amazon.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.4 KiB |
BIN
app/src/images/gatsby-astronaut.png
Normal file
BIN
app/src/images/gatsby-astronaut.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 163 KiB |
BIN
app/src/images/gatsby-icon.png
Normal file
BIN
app/src/images/gatsby-icon.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 21 KiB |
BIN
app/src/images/goodreads.png
Normal file
BIN
app/src/images/goodreads.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 3.4 KiB |
14
app/src/pages/404.js
Normal file
14
app/src/pages/404.js
Normal file
@@ -0,0 +1,14 @@
|
||||
import React from "react"
|
||||
|
||||
import Layout from "../components/layout"
|
||||
import SEO from "../components/seo"
|
||||
|
||||
const NotFoundPage = () => (
|
||||
<Layout>
|
||||
<SEO title="404: Not found" />
|
||||
<h1 id="title">NOT FOUND</h1>
|
||||
<p>You just hit a route that doesn't exist... the sadness.</p>
|
||||
</Layout>
|
||||
)
|
||||
|
||||
export default NotFoundPage
|
||||
79
app/src/pages/index.js
Normal file
79
app/src/pages/index.js
Normal file
@@ -0,0 +1,79 @@
|
||||
import React, { useState, useEffect } from "react"
|
||||
import { graphql } from "gatsby"
|
||||
|
||||
import Layout from "../components/layout"
|
||||
import SEO from "../components/seo"
|
||||
import SideBar from "../components/sidebar"
|
||||
import { Container, Row, Col, Navbar } from "react-bootstrap"
|
||||
import BookFeed from "../components/feed"
|
||||
|
||||
function myFunction(setMaximumBooksToShow, maximumBooksToShow) {
|
||||
if (
|
||||
document.documentElement.clientHeight +
|
||||
document.documentElement.scrollTop >=
|
||||
document.documentElement.scrollHeight
|
||||
) {
|
||||
setMaximumBooksToShow(maximumBooksToShow + 12)
|
||||
}
|
||||
}
|
||||
|
||||
export default ({ data }) => {
|
||||
let [maximumBooksToShow, setMaximumBooksToShow] = useState(12)
|
||||
|
||||
useEffect(() => {
|
||||
window.document.onscroll = () =>
|
||||
myFunction(setMaximumBooksToShow, maximumBooksToShow)
|
||||
})
|
||||
|
||||
return (
|
||||
<Layout>
|
||||
<SEO title="Home" />
|
||||
<Container fluid>
|
||||
<Row>
|
||||
<Col lg={2}>
|
||||
<SideBar />
|
||||
</Col>
|
||||
<Col lg={10}>
|
||||
<BookFeed data={data} limit={maximumBooksToShow} />
|
||||
</Col>
|
||||
</Row>
|
||||
<Row>
|
||||
{/* <footer style={{marginLeft: 150,
|
||||
width: `100%`,
|
||||
position: `fixed`,
|
||||
bottom: 0}}>
|
||||
© {new Date().getFullYear()}, Built with
|
||||
{` `}
|
||||
<a href="https://www.gatsbyjs.org">Gatsby</a>
|
||||
</footer> */}
|
||||
</Row>
|
||||
</Container>
|
||||
</Layout>
|
||||
)
|
||||
}
|
||||
|
||||
export const query = graphql`
|
||||
query MyQuery {
|
||||
allBooksJson(
|
||||
sort: {
|
||||
fields: [rating]
|
||||
order: DESC
|
||||
}
|
||||
) {
|
||||
edges {
|
||||
node {
|
||||
id
|
||||
title
|
||||
url
|
||||
rating
|
||||
author
|
||||
year
|
||||
category
|
||||
description
|
||||
image_url
|
||||
amazon_url
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
`
|
||||
16
app/src/pages/page-2.js
Normal file
16
app/src/pages/page-2.js
Normal file
@@ -0,0 +1,16 @@
|
||||
import React from "react"
|
||||
import { Link } from "gatsby"
|
||||
|
||||
import Layout from "../components/layout"
|
||||
import SEO from "../components/seo"
|
||||
|
||||
const SecondPage = () => (
|
||||
<Layout>
|
||||
<SEO title="Page two" />
|
||||
<h1>Hi from the second page</h1>
|
||||
<p>Welcome to page 2</p>
|
||||
<Link to="/">Go back to the homepage</Link>
|
||||
</Layout>
|
||||
)
|
||||
|
||||
export default SecondPage
|
||||
36
app/src/pages/readingList.js
Normal file
36
app/src/pages/readingList.js
Normal file
@@ -0,0 +1,36 @@
|
||||
import React, { useContext } from "react"
|
||||
import { Link } from "gatsby"
|
||||
import { Container, Row, Col } from "react-bootstrap"
|
||||
import SideBar from "../components/sidebar"
|
||||
import Layout from "../components/layout"
|
||||
import SEO from "../components/seo"
|
||||
import Bookcard from "../components/bookcard"
|
||||
import { BookmarkContext } from "../context/globalState"
|
||||
|
||||
const ReadingList = () => {
|
||||
const { readingList } = useContext(BookmarkContext)
|
||||
|
||||
return (
|
||||
<Layout>
|
||||
<SEO title="Reading list" />
|
||||
<Container fluid>
|
||||
<Row>
|
||||
<Col xs={2}>
|
||||
<SideBar />
|
||||
</Col>
|
||||
<Col>
|
||||
<h2>Your reading list</h2>
|
||||
<Link to="/">Go back to the homepage</Link>
|
||||
{
|
||||
readingList.bookIds.map(bookId => {
|
||||
return <Bookcard book={readingList.books[bookId]} key={bookId} />
|
||||
})
|
||||
}
|
||||
</Col>
|
||||
</Row>
|
||||
</Container>
|
||||
<p>Reading List</p>
|
||||
</Layout>
|
||||
)}
|
||||
|
||||
export default ReadingList
|
||||
11
app/src/styles/global.css
Normal file
11
app/src/styles/global.css
Normal file
@@ -0,0 +1,11 @@
|
||||
.custom-header{
|
||||
position: fixed;
|
||||
}
|
||||
.footer-text {
|
||||
text-align:center;
|
||||
padding-bottom:1 rem;
|
||||
}
|
||||
|
||||
.dark-mode {
|
||||
background-color: #3c4759;
|
||||
}
|
||||
38
app/src/styles/sidebar.css
Normal file
38
app/src/styles/sidebar.css
Normal file
@@ -0,0 +1,38 @@
|
||||
.sidebar {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
min-height: 100vh !important;
|
||||
margin: 70px 0 0;
|
||||
box-shadow: inset -1px 0 0 rgba(0, 0, 0, 0.1);
|
||||
width: max-content;
|
||||
}
|
||||
|
||||
.nav-link {
|
||||
font-size: 0.9rem;
|
||||
}
|
||||
|
||||
#sidebar-wrapper {
|
||||
min-height: 100vh !important;
|
||||
width: 100vw;
|
||||
margin-left: -1rem;
|
||||
-webkit-transition: margin 0.25s ease-out;
|
||||
-moz-transition: margin 0.25s ease-out;
|
||||
-o-transition: margin 0.25s ease-out;
|
||||
transition: margin 0.25s ease-out;
|
||||
}
|
||||
#sidebar-wrapper .sidebar-heading {
|
||||
padding: 0.875rem 1.25rem;
|
||||
font-size: 1.2rem;
|
||||
}
|
||||
#page-content-wrapper {
|
||||
min-width: 0;
|
||||
width: 100%;
|
||||
}
|
||||
.navbar {
|
||||
padding: 10px 0px;
|
||||
}
|
||||
.navbar-toggler {
|
||||
margin-bottom: 1.2rem;
|
||||
}
|
||||
32
app/src/templates/categoryTemplate.js
Normal file
32
app/src/templates/categoryTemplate.js
Normal file
@@ -0,0 +1,32 @@
|
||||
import React, { useState, useEffect } from "react"
|
||||
import { graphql } from "gatsby"
|
||||
|
||||
import Layout from "../components/layout"
|
||||
import SEO from "../components/seo"
|
||||
import SideBar from "../components/sidebar"
|
||||
import CategoryDescription from "../components/categorydescription"
|
||||
import { Container, Row, Col } from "react-bootstrap"
|
||||
import BookFeed from "../components/feed"
|
||||
|
||||
const basicTemplate = props => {
|
||||
const { pageContext } = props
|
||||
const { categoryName, data, image } = pageContext
|
||||
|
||||
return (
|
||||
<Layout>
|
||||
<SEO title="Home" />
|
||||
<Container fluid>
|
||||
<Row>
|
||||
<Col lg={2}>
|
||||
<SideBar />
|
||||
</Col>
|
||||
<Col lg={10}>
|
||||
<CategoryDescription categoryName={categoryName} categoryImage={image} />
|
||||
<BookFeed data={data} categoryName={categoryName} />
|
||||
</Col>
|
||||
</Row>
|
||||
</Container>
|
||||
</Layout>
|
||||
)
|
||||
}
|
||||
export default basicTemplate
|
||||
16489
app/yarn.lock
Normal file
16489
app/yarn.lock
Normal file
File diff suppressed because it is too large
Load Diff
3
package-lock.json
generated
Normal file
3
package-lock.json
generated
Normal file
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"lockfileVersion": 1
|
||||
}
|
||||
5
utils/.gitignore
vendored
5
utils/.gitignore
vendored
@@ -1,3 +1,8 @@
|
||||
.idea
|
||||
__pycache__
|
||||
config.py
|
||||
bin/
|
||||
include/
|
||||
lib/
|
||||
out.json
|
||||
pip-selfcheck.json
|
||||
|
||||
34
utils/HOUSEKEEPING.md
Normal file
34
utils/HOUSEKEEPING.md
Normal file
@@ -0,0 +1,34 @@
|
||||
This contains documentation on `housekeep.py` which was a command developed for converting from legacy README
|
||||
format to the new format. This is not used anymore.
|
||||
|
||||
|
||||
## Getting started
|
||||
|
||||
### Setup
|
||||
1) Copy ```config-sample.py``` to ```config.py```
|
||||
|
||||
```bash
|
||||
cp config-sample.py config.py
|
||||
```
|
||||
2) Get a GoodReads API key [here](https://www.goodreads.com/api/keys)
|
||||
3) Copy your public key to the ```config.py``` file
|
||||
|
||||
### Converting
|
||||
|
||||
Run
|
||||
|
||||
```bash
|
||||
python3 housekeep.py --file_type='old'
|
||||
```
|
||||
|
||||
The ``--file_type='old'`` flag is needed if the books are displayed in the old format (in a list). New format is the default (when the records are displayed in tables).
|
||||
|
||||
This will convert to the new format and save it to ``README-new.md``.
|
||||
|
||||
**Note!** the first conversion can take some time, we wait 1 second between each request to GoodReads to not abuse the API.
|
||||
After the first generation only missing records will be tried to be retrieved.
|
||||
|
||||
Run to see the available arguments
|
||||
```bash
|
||||
python3 housekeep.py --help
|
||||
```
|
||||
@@ -1,34 +1,37 @@
|
||||
# Utils for Mind-Expanding-Books
|
||||
`utils/` mainly contains scripts for generating `app/src/data/books.json` file from `README.md`
|
||||
|
||||
Simple command line interface to extend and order the Mind-Expanding-Books list.
|
||||
In most cases, you don't want to run the scripts in this directory or make changes to it.
|
||||
The only time you want to mess with the scripts is when you want to fetch some extra data from `API` or
|
||||
want to update the `app/src/data/books.json` file to include a newly added book or category.
|
||||
|
||||
## Getting started
|
||||
## Generating `app/src/data/books.json`
|
||||
|
||||
### Setup
|
||||
1) Copy ```config-sample.py``` to ```config.py```
|
||||
The website shows name of the book, year, rating, cover, amazon link, etc in book card. Some of the
|
||||
data like name, year, rating etc is present in the [main README.md](../README.md). Other details
|
||||
like cover photo, amazon link etc is fetched from various APIs.
|
||||
|
||||
The script that fetches all these extra data lives in `utils/update_json_files.py`
|
||||
|
||||
The script goes through all the books in [main README.md](../README.md) and starts fetching the extra details
|
||||
from `Goodreads` and `Google Search` API. And the result is stored in `utils/books.json` and `utils/book_name_to_details.json`
|
||||
(used for caching only).
|
||||
|
||||
Once the script completes the run, the `utils/books.json` file is copied to `app/src/data/books.json` **manually**.
|
||||
|
||||
And the website uses the data from `app/src/data/books.json` for generating the pages.
|
||||
|
||||
## Install packages for script
|
||||
|
||||
```bash
|
||||
cp config-sample.py config.py
|
||||
```
|
||||
2) Get a GoodReads API key [here](https://www.goodreads.com/api/keys)
|
||||
3) Copy your public key to the ```config.py``` file
|
||||
|
||||
### Converting
|
||||
|
||||
Run
|
||||
|
||||
```bash
|
||||
python3 housekeep.py --file_type='old'
|
||||
cd utils
|
||||
virtualenv .
|
||||
source bin/activate
|
||||
pip install -r requirements.txt
|
||||
```
|
||||
|
||||
The ``--file_type='old'`` flag is needed if the books are displayed in the old format (in a list). New format is the default (when the records are displayed in tables).
|
||||
## Executing the script
|
||||
|
||||
This will convert to the new format and save it to ``README-new.md``.
|
||||
|
||||
**Note!** the first conversion can take some time, we wait 1 second between each request to GoodReads to not abuse the API.
|
||||
After the first generation only missing records will be tried to be retrieved.
|
||||
|
||||
Run to see the available arguments
|
||||
```bash
|
||||
python3 housekeep.py --help
|
||||
```
|
||||
- Register at [goodreads](https://www.goodreads.com)
|
||||
- Apply for a developer api [here](https://www.goodreads.com/api)
|
||||
- Copy utils/config-sample.py as utils/config.py
|
||||
- Fill in the API Key credentials
|
||||
|
||||
5728
utils/book_name_to_details.json
Normal file
5728
utils/book_name_to_details.json
Normal file
File diff suppressed because it is too large
Load Diff
5728
utils/books.json
Normal file
5728
utils/books.json
Normal file
File diff suppressed because it is too large
Load Diff
@@ -1,2 +1,5 @@
|
||||
# save this file as 'config.py' and then, fill it with you api key
|
||||
GOODREADS_PUBLIC_API_KEY = 'write here your goodreads public API key'
|
||||
GOODREADS_PUBLIC_API_KEY = "write here your goodreads public API key"
|
||||
GOOGLE_SEARCH_RAPIDAPI_HOST = ""
|
||||
GOOGLE_SEARCH_RAPIDAPI_KEY = ""
|
||||
GOOGLE_BOOK_API_KEY = ""
|
||||
|
||||
@@ -3,50 +3,104 @@ import xml.etree.ElementTree as ET
|
||||
import urllib.request
|
||||
import urllib.error
|
||||
|
||||
from config import GOODREADS_PUBLIC_API_KEY
|
||||
import requests
|
||||
|
||||
from bs4 import BeautifulSoup
|
||||
|
||||
from config import GOODREADS_PUBLIC_API_KEY, GOOGLE_SEARCH_RAPIDAPI_HOST, GOOGLE_SEARCH_RAPIDAPI_KEY, GOOGLE_BOOK_API_KEY
|
||||
from googlesearch import search
|
||||
|
||||
def get_details(book_object):
|
||||
|
||||
url = "http://www.goodreads.com/book/title.xml?key={}&title={}".format(GOODREADS_PUBLIC_API_KEY,
|
||||
urllib.parse.quote_plus(book_object['title']))
|
||||
|
||||
url = "http://www.goodreads.com/book/title.xml?key={}&title={}".format(
|
||||
GOODREADS_PUBLIC_API_KEY, urllib.parse.quote_plus(book_object["title"])
|
||||
)
|
||||
print(url)
|
||||
try:
|
||||
tree = ET.ElementTree(file=urllib.request.urlopen(url))
|
||||
time_to_sleep = 1
|
||||
while True:
|
||||
response = urllib.request.urlopen(url)
|
||||
print(response.getcode())
|
||||
if response.getcode() == 429:
|
||||
time_to_sleep = time_to_sleep * 2
|
||||
print("Sleeping for {}".format(time_to_sleep))
|
||||
time.sleep(time_to_sleep)
|
||||
else:
|
||||
break
|
||||
tree = ET.ElementTree(file=response)
|
||||
root = tree.getroot()
|
||||
book = root.find('book')
|
||||
book_object['year'] = book.find('publication_year').text or ''
|
||||
book_object['lang'] = book.find('language_code').text
|
||||
book_object['rating'] = book.find('average_rating').text
|
||||
book_object['pages'] = book.find('num_pages').text
|
||||
book = root.find("book")
|
||||
book_object["year"] = book.find("publication_year").text or ""
|
||||
book_object["lang"] = book.find("language_code").text
|
||||
book_object["rating"] = book.find("average_rating").text
|
||||
book_object["pages"] = book.find("num_pages").text
|
||||
book_object["image_url"] = book.find("image_url").text
|
||||
book_object["isbn"] = book.find("isbn").text
|
||||
|
||||
description = book.find("description").text
|
||||
if description:
|
||||
book_object["description"] = BeautifulSoup(description).text
|
||||
else:
|
||||
book_object["description"] = ""
|
||||
if GOOGLE_BOOK_API_KEY.strip(" "):
|
||||
# Attempt to use Google Book API
|
||||
url = "https://www.googleapis.com/books/v1/volumes?q={}+inauthor:{}&key={}".format(
|
||||
book_object["title"], book_object["author"], GOOGLE_BOOK_API_KEY,
|
||||
)
|
||||
response = requests.request("GET", url)
|
||||
|
||||
for item in response.json()["items"]:
|
||||
if "description" in item["volumeInfo"]:
|
||||
book_object["description"] = item["volumeInfo"]["description"]
|
||||
break
|
||||
|
||||
print("Fetching amazon link")
|
||||
|
||||
url = "https://google-search3.p.rapidapi.com/api/v1/search/q=site:amazon.com {} {}".format(book_object["title"], book_object["author"])
|
||||
|
||||
headers = {
|
||||
'x-rapidapi-host': GOOGLE_SEARCH_RAPIDAPI_HOST,
|
||||
'x-rapidapi-key': GOOGLE_SEARCH_RAPIDAPI_KEY,
|
||||
}
|
||||
|
||||
response = requests.request("GET", url, headers=headers)
|
||||
book_object["amazon_url"] = response.json()["results"][0]["link"]
|
||||
return True
|
||||
except urllib.error.HTTPError as e:
|
||||
print('Error getting book details from GoodReads for book: {}. \nGot error: '.format(book_object['title']))
|
||||
print(str(e.getcode()) + ' ' + e.msg)
|
||||
print(
|
||||
"Error getting book details from GoodReads for book: {}. \nGot error: ".format(
|
||||
book_object["title"]
|
||||
)
|
||||
)
|
||||
print(str(e.getcode()) + " " + e.msg)
|
||||
return False
|
||||
|
||||
|
||||
def get_goodread_info(library):
|
||||
def get_goodread_info(library, force):
|
||||
import sys
|
||||
print('')
|
||||
print('Getting GoodReads data...')
|
||||
|
||||
print("")
|
||||
print("Getting GoodReads data...")
|
||||
|
||||
processed = 0
|
||||
total_book_count = 0
|
||||
for key in library:
|
||||
total_book_count += len(library[key])
|
||||
|
||||
|
||||
for chapter in library:
|
||||
book_list = library[chapter]
|
||||
for category in library:
|
||||
book_list = library[category]
|
||||
for book in book_list:
|
||||
# do not call the api again if we already have the infomation
|
||||
if 'rating' in book and book['rating']:
|
||||
if not force and "rating" in book and book["rating"]:
|
||||
processed += 1
|
||||
continue
|
||||
get_details(book)
|
||||
processed += 1
|
||||
|
||||
print('{}/{} records processed.'.format(processed, total_book_count), end="\b")
|
||||
sys.stdout.write('\r')
|
||||
print(
|
||||
"{}/{} records processed.".format(processed, total_book_count), end="\b"
|
||||
)
|
||||
sys.stdout.write("\r")
|
||||
sys.stdout.flush() # <- makes python print it anyway
|
||||
|
||||
# need to wait a second between the requests, to not abuse the API
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
import simplejson
|
||||
|
||||
# we assume that every line after # Books
|
||||
# starting with * is a book title if file type is old
|
||||
# starting with | (and not with | Name or |--) is a book if the file type is new
|
||||
@@ -5,51 +7,71 @@
|
||||
# ARGUMENT HANDLING
|
||||
try:
|
||||
import argparse
|
||||
parser = argparse.ArgumentParser(description='Process file.')
|
||||
|
||||
parser = argparse.ArgumentParser(description="Process file.")
|
||||
parser.add_argument("--in_file", help="File to process, defaults to ./../README.MD")
|
||||
parser.add_argument(
|
||||
'--in_file',
|
||||
help='File to process, defaults to ./../README.MD')
|
||||
"--out_file", help="File to save to, defaults to ./../README-NEW.MD"
|
||||
)
|
||||
parser.add_argument(
|
||||
'--out_file',
|
||||
help='File to save to, defaults to ./../README-NEW.MD')
|
||||
"--input_file_type",
|
||||
choices=["old", "new"],
|
||||
help="old if links are displayed in a list, new if in a table",
|
||||
)
|
||||
parser.add_argument(
|
||||
'--file_type',
|
||||
choices=['old', 'new'],
|
||||
help='old if links are displayed in a list, new if in a table')
|
||||
"--sort_by",
|
||||
choices=["rating", "title", "author", "year"],
|
||||
help="defaults to rating",
|
||||
)
|
||||
parser.add_argument("--force", dest="force", action="store_true", default=False)
|
||||
parser.add_argument(
|
||||
'--sort_by',
|
||||
choices = ['rating', 'title', 'author', 'year'],
|
||||
help='defaults to rating')
|
||||
"--store-json", dest="store_json", action="store_true", default=False
|
||||
)
|
||||
flags = parser.parse_args()
|
||||
except ImportError:
|
||||
flags = None
|
||||
|
||||
|
||||
def sort(library, key_to_sort_on, reverse = False):
|
||||
def sort(library, key_to_sort_on, reverse=False):
|
||||
new_library = {}
|
||||
for key in library:
|
||||
books = library[key]
|
||||
new_library[key] = sorted(books, key=lambda k: k[key_to_sort_on], reverse=reverse)
|
||||
new_library[key] = sorted(
|
||||
books, key=lambda k: k[key_to_sort_on], reverse=reverse
|
||||
)
|
||||
return new_library
|
||||
|
||||
|
||||
def format_library(library):
|
||||
formated_library = []
|
||||
for category in library:
|
||||
for book in library[category]:
|
||||
book["category"] = category[len("## ") :]
|
||||
formated_library.append(book)
|
||||
return formated_library
|
||||
|
||||
|
||||
def main():
|
||||
from read_file import load
|
||||
from gooodreads import get_goodread_info
|
||||
from write_file import render
|
||||
|
||||
in_file = flags.in_file or './../README.MD'
|
||||
out_file = flags.out_file or './../README-new.md'
|
||||
file_type = flags.file_type or 'new'
|
||||
sort_by = flags.sort_by or 'rating'
|
||||
reverse = True if sort_by == 'rating' else False
|
||||
in_file = flags.in_file or "./../README.md"
|
||||
out_file = flags.out_file or "./../README-new.md"
|
||||
input_file_type = flags.input_file_type or "new"
|
||||
sort_by = flags.sort_by or "rating"
|
||||
force = flags.force
|
||||
store_json = flags.store_json
|
||||
reverse = True if sort_by == "rating" else False
|
||||
|
||||
library = load(in_file, file_type)
|
||||
get_goodread_info(library)
|
||||
library = load(in_file, input_file_type)
|
||||
get_goodread_info(library, force)
|
||||
library = sort(library, sort_by, reverse)
|
||||
render(in_file, out_file, library)
|
||||
if store_json:
|
||||
with open("out.json", "w") as f:
|
||||
f.write(simplejson.dumps(format_library(library), indent=4, sort_keys=True))
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
|
||||
|
||||
|
||||
8
utils/pyvenv.cfg
Normal file
8
utils/pyvenv.cfg
Normal file
@@ -0,0 +1,8 @@
|
||||
home = /usr
|
||||
implementation = CPython
|
||||
version_info = 3.8.5.final.0
|
||||
virtualenv = 20.0.20
|
||||
include-system-site-packages = false
|
||||
base-prefix = /usr
|
||||
base-exec-prefix = /usr
|
||||
base-executable = /usr/bin/python3
|
||||
@@ -8,24 +8,24 @@ def read_file_content(file):
|
||||
# old (list)
|
||||
def parse_book_string(book_string):
|
||||
book = {}
|
||||
book['title'] = book_string.split('[')[1].split(']')[0]
|
||||
book['url'] = book_string.split(']')[1].split('(')[1].split(')')[0]
|
||||
book['author'] = book_string.split(' by ')[-1]
|
||||
book['rating'] = ''
|
||||
book['year'] = ''
|
||||
book["title"] = book_string.split("[")[1].split("]")[0]
|
||||
book["url"] = book_string.split("]")[1].split("(")[1].split(")")[0]
|
||||
book["author"] = book_string.split(" by ")[-1]
|
||||
book["rating"] = ""
|
||||
book["year"] = ""
|
||||
return book
|
||||
|
||||
|
||||
# new (table)
|
||||
def parse_book_string_new(book_string):
|
||||
book = {}
|
||||
book_split = book_string.split('|')
|
||||
book_split = book_string.split("|")
|
||||
# print(book_split)
|
||||
book['title'] = book_split[1].strip()
|
||||
book['author'] = book_split[2].strip()
|
||||
book['url'] = book_split[3].strip().split('[')[1].split('(')[1].split(')')[0]
|
||||
book['rating'] = book_split[3].strip().split('[')[1].split(']')[0]
|
||||
book['year'] = book_split[4].strip()
|
||||
book["title"] = book_split[1].strip()
|
||||
book["author"] = book_split[2].strip()
|
||||
book["url"] = book_split[3].strip().split("[")[1].split("(")[1].split(")")[0]
|
||||
book["rating"] = book_split[3].strip().split("[")[1].split("]")[0]
|
||||
book["year"] = book_split[4].strip()
|
||||
return book
|
||||
|
||||
|
||||
@@ -33,8 +33,8 @@ def load(file, file_type):
|
||||
file = read_file_content(file)
|
||||
|
||||
# we start one line after tilte # Books
|
||||
line_to_start = file.index('# Books') + 1
|
||||
current_title = ''
|
||||
line_to_start = file.index("# Books") + 1
|
||||
current_title = ""
|
||||
books_under_current_title = []
|
||||
library = {}
|
||||
|
||||
@@ -42,7 +42,7 @@ def load(file, file_type):
|
||||
line = file[i]
|
||||
|
||||
# we have a title
|
||||
if line.startswith('##'):
|
||||
if line.startswith("##"):
|
||||
if len(current_title) == 0:
|
||||
current_title = line
|
||||
else:
|
||||
@@ -52,12 +52,16 @@ def load(file, file_type):
|
||||
continue
|
||||
|
||||
# we have a book
|
||||
if file_type == 'old':
|
||||
if line.startswith('*'):
|
||||
if file_type == "old":
|
||||
if line.startswith("*"):
|
||||
book = parse_book_string(line)
|
||||
books_under_current_title.append(book)
|
||||
else:
|
||||
if line.startswith('|') and not line.startswith('| Name') and not line.startswith('|---'):
|
||||
if (
|
||||
line.startswith("|")
|
||||
and not line.startswith("| Name")
|
||||
and not line.startswith("|---")
|
||||
):
|
||||
book = parse_book_string_new(line)
|
||||
books_under_current_title.append(book)
|
||||
|
||||
|
||||
26
utils/requirements.txt
Normal file
26
utils/requirements.txt
Normal file
@@ -0,0 +1,26 @@
|
||||
appdirs==1.4.4
|
||||
attrs==20.1.0
|
||||
black==19.10b0
|
||||
click==7.1.2
|
||||
pathspec==0.8.0
|
||||
regex==2020.7.14
|
||||
toml==0.10.1
|
||||
typed-ast==1.4.1
|
||||
amzsear==2.0.1
|
||||
appdirs==1.4.4
|
||||
attrs==20.1.0
|
||||
beautifulsoup4==4.9.1
|
||||
black==19.10b0
|
||||
bs4==0.0.1
|
||||
certifi==2020.6.20
|
||||
chardet==3.0.4
|
||||
click==7.1.2
|
||||
google==3.0.0
|
||||
idna==2.10
|
||||
pathspec==0.8.0
|
||||
regex==2020.7.14
|
||||
requests==2.24.0
|
||||
soupsieve==2.0.1
|
||||
toml==0.10.1
|
||||
typed-ast==1.4.1
|
||||
urllib3==1.25.10
|
||||
94
utils/update_json_files.py
Normal file
94
utils/update_json_files.py
Normal file
@@ -0,0 +1,94 @@
|
||||
import json
|
||||
import time
|
||||
|
||||
from read_file import load
|
||||
from gooodreads import get_details
|
||||
from bs4 import BeautifulSoup
|
||||
|
||||
required_fields = [
|
||||
"title",
|
||||
"author",
|
||||
"url",
|
||||
"rating",
|
||||
"year",
|
||||
"pages",
|
||||
"image_url",
|
||||
"description",
|
||||
"category",
|
||||
"amazon_url",
|
||||
]
|
||||
|
||||
|
||||
def book_has_all_fields(book):
|
||||
for required_field in required_fields:
|
||||
if required_field not in existing_book:
|
||||
print(f"Missing {required_field}")
|
||||
return False
|
||||
return True
|
||||
|
||||
|
||||
def clean_category(category_raw):
|
||||
if "### " in category_raw:
|
||||
return category_raw[4:]
|
||||
if "## " in category_raw:
|
||||
return category_raw[3:]
|
||||
|
||||
def validate_bookcover(book_details):
|
||||
"""
|
||||
Check if goodreads returns a nophoto
|
||||
Use open library to fetch the book cover
|
||||
based on ISBN
|
||||
|
||||
Args:
|
||||
book_details: Book info returned as json by goodreads API
|
||||
|
||||
Returns:
|
||||
This API checks for book cover, and returns with a valid
|
||||
bookcover if nophoto found on goodreads, using openlibrary
|
||||
"""
|
||||
no_photo_url='https://s.gr-assets.com/assets/nophoto/book/'
|
||||
open_library_url='http://covers.openlibrary.org/b/isbn/{isbn}-M.jpg'
|
||||
|
||||
if (book_details['image_url'].__contains__(no_photo_url)):
|
||||
book_details['image_url'] = open_library_url.format(isbn=book_details['isbn'])
|
||||
return book_details
|
||||
|
||||
if __name__ == "__main__":
|
||||
library = load("../README.md", "new")
|
||||
existing_book_names_to_details = json.load(open("book_name_to_details.json"))
|
||||
|
||||
for category in library:
|
||||
category_name = clean_category(category)
|
||||
for book in library[category]:
|
||||
if (title := book["title"]) in existing_book_names_to_details:
|
||||
existing_book = existing_book_names_to_details[title]
|
||||
if book_has_all_fields(existing_book):
|
||||
print(f"🆗 {title}")
|
||||
continue
|
||||
new_book = {
|
||||
"title": title,
|
||||
"author": book["author"],
|
||||
"url": book["url"],
|
||||
"category": category_name,
|
||||
}
|
||||
fetched = get_details(new_book)
|
||||
if fetched:
|
||||
print(f"✅ {title}")
|
||||
new_book = validate_bookcover(new_book)
|
||||
existing_book_names_to_details[title] = new_book
|
||||
with open("book_name_to_details.json", "w") as f:
|
||||
json.dump(
|
||||
existing_book_names_to_details,
|
||||
f,
|
||||
sort_keys=True,
|
||||
indent=4,
|
||||
separators=(",", ": "),
|
||||
)
|
||||
|
||||
book_list = []
|
||||
for _, book in existing_book_names_to_details.items():
|
||||
book_list.append(book)
|
||||
with open("books.json", "w") as f:
|
||||
json.dump(book_list, f, sort_keys=True, indent=4, separators=(",", ": "))
|
||||
else:
|
||||
print(f"❌ Error while fetching {title}")
|
||||
@@ -4,14 +4,12 @@ import os
|
||||
|
||||
def render_book_line(book_object):
|
||||
book = book_object
|
||||
book['rating'] = '?' if not 'rating' in book else book['rating']
|
||||
book['url'] = '' if not 'url' in book else book['url']
|
||||
book['year'] = '' if not 'year' in book else book['year']
|
||||
return '| {} | {} | [{}]({}) | {} | \n'.format(book['title'],
|
||||
book['author'],
|
||||
book['rating'],
|
||||
book['url'],
|
||||
book['year'])
|
||||
book["rating"] = "?" if not "rating" in book else book["rating"]
|
||||
book["url"] = "" if not "url" in book else book["url"]
|
||||
book["year"] = "" if not "year" in book else book["year"]
|
||||
return "| {} | {} | [{}]({}) | {} | \n".format(
|
||||
book["title"], book["author"], book["rating"], book["url"], book["year"]
|
||||
)
|
||||
|
||||
|
||||
# TODO: refine this logic
|
||||
@@ -21,30 +19,35 @@ def render(in_file, out_file, library):
|
||||
savig the new file to tmp_file location, the copying it to out-file and deleting tmp_file
|
||||
this is done to prevent issues if the in and the out file are the same
|
||||
"""
|
||||
tmp_file = './.tmp-file.md'
|
||||
open(tmp_file, 'a').close()
|
||||
tmp_file = "./.tmp-file.md"
|
||||
open(tmp_file, "a").close()
|
||||
books_not_reached = True
|
||||
with open(tmp_file, 'w') as out_file_tmp:
|
||||
with open(tmp_file, "w") as out_file_tmp:
|
||||
with open(in_file) as original_file:
|
||||
for line in original_file:
|
||||
|
||||
if line.strip() in library:
|
||||
if not books_not_reached: out_file_tmp.write('\n')
|
||||
if not books_not_reached:
|
||||
out_file_tmp.write("\n")
|
||||
books_not_reached = False
|
||||
|
||||
# render chapter and start of the table
|
||||
out_file_tmp.write(line)
|
||||
if len(library[line.strip()]) > 0:
|
||||
out_file_tmp.write('| Name | Author | Goodreads Rating | Year Published | \n')
|
||||
out_file_tmp.write('|------|--------|------------------|----------------| \n')
|
||||
out_file_tmp.write(
|
||||
"| Name | Author | Goodreads Rating | Year Published | \n"
|
||||
)
|
||||
out_file_tmp.write(
|
||||
"|------|--------|------------------|----------------| \n"
|
||||
)
|
||||
# render books
|
||||
for book in library[line.strip()]:
|
||||
out_file_tmp.write(render_book_line(book))
|
||||
elif books_not_reached:
|
||||
out_file_tmp.write(line)
|
||||
elif line.startswith('## License'):
|
||||
out_file_tmp.write('\n')
|
||||
out_file_tmp.write('\n')
|
||||
elif line.startswith("## License"):
|
||||
out_file_tmp.write("\n")
|
||||
out_file_tmp.write("\n")
|
||||
out_file_tmp.write(line)
|
||||
books_not_reached = True
|
||||
|
||||
|
||||
Reference in New Issue
Block a user