├── src ├── env.d.ts ├── styles │ └── main.css ├── layouts │ └── BaseLayout.astro ├── pages │ ├── success.astro │ ├── results.astro │ └── index.astro └── components │ └── svg │ ├── SvgMixtape.astro │ ├── SvgLogo.astro │ └── SvgMixtapeSessions.astro ├── .npmrc ├── public ├── favicon.ico └── papers.csv ├── .vscode ├── extensions.json └── launch.json ├── .gitignore ├── astro.config.mjs ├── tsconfig.json ├── package.json ├── README.md └── tailwind.config.cjs /src/env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | -------------------------------------------------------------------------------- /.npmrc: -------------------------------------------------------------------------------- 1 | # Expose Astro dependencies for `pnpm` users 2 | shamefully-hoist=true 3 | -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mixtape-Sessions/Great-Economics-Writing/HEAD/public/favicon.ico -------------------------------------------------------------------------------- /.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | "recommendations": ["astro-build.astro-vscode"], 3 | "unwantedRecommendations": [] 4 | } 5 | -------------------------------------------------------------------------------- /src/styles/main.css: -------------------------------------------------------------------------------- 1 | @import url("https://fonts.googleapis.com/css2?family=Permanent+Marker&family=Poppins:ital,wght@0,400;0,500;0,600;0,700;0,800;1,400;1,500&display=swap"); 2 | -------------------------------------------------------------------------------- /.vscode/launch.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "0.2.0", 3 | "configurations": [ 4 | { 5 | "command": "./node_modules/.bin/astro dev", 6 | "name": "Development server", 7 | "request": "launch", 8 | "type": "node-terminal" 9 | } 10 | ] 11 | } 12 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # build output 2 | dist/ 3 | 4 | # dependencies 5 | node_modules/ 6 | 7 | # logs 8 | npm-debug.log* 9 | yarn-debug.log* 10 | yarn-error.log* 11 | pnpm-debug.log* 12 | 13 | 14 | # environment variables 15 | .env 16 | .env.production 17 | 18 | # macOS-specific files 19 | .DS_Store 20 | package-lock.json 21 | -------------------------------------------------------------------------------- /astro.config.mjs: -------------------------------------------------------------------------------- 1 | import { defineConfig } from "astro/config" 2 | import tailwind from "@astrojs/tailwind" 3 | 4 | import react from "@astrojs/react" 5 | 6 | // https://astro.build/config 7 | export default defineConfig({ 8 | integrations: [tailwind(), react()], 9 | vite: { 10 | ssr: { 11 | external: ["svgo"], 12 | }, 13 | }, 14 | }) 15 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | // Enable top-level await, and other modern ESM features. 4 | "target": "ESNext", 5 | "module": "ESNext", 6 | // Enable node-style module resolution, for things like npm package imports. 7 | "moduleResolution": "node", 8 | // Enable JSON imports. 9 | "resolveJsonModule": true, 10 | // Enable stricter transpilation for better output. 11 | "isolatedModules": true, 12 | // Astro will directly run your TypeScript code, no transpilation needed. 13 | "noEmit": true 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/layouts/BaseLayout.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import SvgLogo from "../components/svg/SvgLogo.astro"; 3 | import "../styles/main.css"; 4 | --- 5 | 6 | 7 | 8 | 9 | 10 | 11 | Great Economics Writing 12 | 13 | 14 |
15 | 16 | 17 | 18 |

Mixtape Sessions

19 |
20 | 21 | 22 |
23 | 24 | 25 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "GreatEconomicsWriting", 3 | "version": "0.1.0", 4 | "private": true, 5 | "scripts": { 6 | "dev": "astro dev", 7 | "start": "astro dev", 8 | "build": "astro build", 9 | "preview": "astro preview", 10 | "astro": "astro" 11 | }, 12 | "devDependencies": { 13 | "@astrojs/react": "^1.0.0", 14 | "@astrojs/tailwind": "^1.0.0", 15 | "@tailwindcss/forms": "^0.5.2", 16 | "@tailwindcss/typography": "^0.5.4", 17 | "astro": "^1.0.3", 18 | "convert-csv-to-json": "^1.3.3", 19 | "csvtojson": "^2.0.10", 20 | "react": "^18.2.0", 21 | "react-dom": "^18.2.0" 22 | }, 23 | "dependencies": { 24 | "@tanstack/react-table": "^8.5.11", 25 | "astro-icon": "^0.7.3", 26 | "install": "^0.13.0", 27 | "npm": "^8.17.0" 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/pages/success.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import BaseLayout from "../layouts/BaseLayout.astro"; 3 | --- 4 | 5 | 6 | 7 |
8 |

Thank you for submitting!

9 |

10 | Our goal is to gather 100 great papers. If you have another great 11 | paper, please submit! If you don't, that's okay don't force it! 12 |

13 | 14 | 16 | Submit another paper 17 | 19 | 21 | 22 | 23 |
24 |
25 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Astro Starter Kit: Minimal 2 | 3 | ``` 4 | npm init astro -- --template minimal 5 | ``` 6 | 7 | [![Open in StackBlitz](https://developer.stackblitz.com/img/open_in_stackblitz.svg)](https://stackblitz.com/github/withastro/astro/tree/latest/examples/minimal) 8 | 9 | > 🧑‍🚀 **Seasoned astronaut?** Delete this file. Have fun! 10 | 11 | ## 🚀 Project Structure 12 | 13 | Inside of your Astro project, you'll see the following folders and files: 14 | 15 | ``` 16 | / 17 | ├── public/ 18 | ├── src/ 19 | │ └── pages/ 20 | │ └── index.astro 21 | └── package.json 22 | ``` 23 | 24 | Astro looks for `.astro` or `.md` files in the `src/pages/` directory. Each page is exposed as a route based on its file name. 25 | 26 | There's nothing special about `src/components/`, but that's where we like to put any Astro/React/Vue/Svelte/Preact components. 27 | 28 | Any static assets, like images, can be placed in the `public/` directory. 29 | 30 | ## 🧞 Commands 31 | 32 | All commands are run from the root of the project, from a terminal: 33 | 34 | | Command | Action | 35 | | :--------------------- | :----------------------------------------------- | 36 | | `npm install` | Installs dependencies | 37 | | `npm run dev` | Starts local dev server at `localhost:3000` | 38 | | `npm run build` | Build your production site to `./dist/` | 39 | | `npm run preview` | Preview your build locally, before deploying | 40 | | `npm run astro ...` | Run CLI commands like `astro add`, `astro check` | 41 | | `npm run astro --help` | Get help using the Astro CLI | 42 | 43 | ## 👀 Want to learn more? 44 | 45 | Feel free to check [our documentation](https://docs.astro.build) or jump into our [Discord server](https://astro.build/chat). 46 | -------------------------------------------------------------------------------- /tailwind.config.cjs: -------------------------------------------------------------------------------- 1 | /** @type {import('tailwindcss').Config} */ 2 | module.exports = { 3 | darkMode: "class", 4 | content: ['./src/**/*.{astro,html,js,jsx,md,svelte,ts,tsx,vue}'], 5 | theme: { 6 | extend: { 7 | screens: { 8 | 'prose': '80ch', // max-w-prose 9 | 'md': '640px', // tablet 10 | 'lg': '1024px', // computer 11 | 'xl': '1280px', // large computer 12 | }, 13 | maxWidth: { 14 | 'md': '640px', 15 | 'lg': '1024px', 16 | 'xl': '1280px', 17 | 'prose': '80ch', // max-w-prose 18 | }, 19 | fontFamily: { 20 | sans: ["Poppins", "sans-serif"], 21 | fira: ["Poppins", "sans-serif"], 22 | marker: ["Permanent Marker", "cursive"], 23 | }, 24 | colors: { 25 | "picton-blue": { 26 | 50: "#f2fbff", 27 | 100: "#e6f8ff", 28 | 200: "#bfedff", 29 | 300: "#99e2ff", 30 | 400: "#4dcdff", 31 | 500: "#00b7ff", 32 | 600: "#00a5e6", 33 | 700: "#0089bf", 34 | 800: "#006e99", 35 | 900: "#005a7d", 36 | }, 37 | "violet-red": { 38 | 50: "#fff5f9", 39 | 100: "#ffebf2", 40 | 200: "#ffcde0", 41 | 300: "#ffafcd", 42 | 400: "#ff74a7", 43 | 500: "#ff3881", 44 | 600: "#e63274", 45 | 700: "#bf2a61", 46 | 800: "#99224d", 47 | 900: "#7d1b3f", 48 | }, 49 | 'sun': { 50 | 50: "#fffbf3", 51 | 100: "#fff7e8", 52 | 200: "#ffebc5", 53 | 300: "#ffdfa3", 54 | 400: "#ffc75d", 55 | 500: "#ffaf18", 56 | 600: "#e69e16", 57 | 700: "#bf8312", 58 | 800: "#99690e", 59 | 900: "#7d560c", 60 | }, 61 | "electric-violet": { 62 | 50: "#f9f4ff", 63 | 100: "#f3e9ff", 64 | 200: "#e1c7ff", 65 | 300: "#cfa5ff", 66 | 400: "#ab62ff", 67 | 500: "#871EFF", 68 | 600: "#7a1be6", 69 | 700: "#6517bf", 70 | 800: "#511299", 71 | 900: "#420f7d", 72 | }, 73 | 'fern': { 74 | '50': '#f7fbf8', 75 | '100': '#f0f7f1', 76 | '200': '#d9ecdb', 77 | '300': '#c2e0c6', 78 | '400': '#95c99b', 79 | '500': '#67b270', 80 | '600': '#5da065', 81 | '700': '#4d8654', 82 | '800': '#3e6b43', 83 | '900': '#325737' 84 | } 85 | }, 86 | }, 87 | }, 88 | variants: { 89 | extend: {}, 90 | }, 91 | plugins: [require("@tailwindcss/typography"), require("@tailwindcss/forms")], 92 | } 93 | -------------------------------------------------------------------------------- /src/components/svg/SvgMixtape.astro: -------------------------------------------------------------------------------- 1 | --- 2 | const { svgClass = "flex-shrink-0 mr-2 h-10 w-10" } = Astro.props; 3 | --- 4 | 5 | 13 | 14 | 18 | 22 | 25 | 29 | 33 | 36 | 39 | 42 | 45 | 49 | 50 | -------------------------------------------------------------------------------- /src/components/svg/SvgLogo.astro: -------------------------------------------------------------------------------- 1 | --- 2 | const { svgClass = "flex-shrink-0 mr-2 h-16 w-16" } = Astro.props; 3 | --- 4 | 5 | 12 | 15 | 18 | 21 | 24 | 27 | 31 | 35 | 39 | 43 | 47 | 51 | 55 | 59 | 63 | 67 | 70 | 73 | 76 | 77 | -------------------------------------------------------------------------------- /src/pages/results.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import BaseLayout from "../layouts/BaseLayout.astro" 3 | import CSVToJSON from "csvtojson" 4 | import { Icon } from "astro-icon" 5 | 6 | // convert users.csv file to JSON array 7 | const papers = await CSVToJSON().fromFile("public/papers.csv") 8 | // console.log(papers[0]) 9 | --- 10 | 11 | 12 | 13 |
14 |

Great Economics Writing

15 |

16 | We reached 100 submitted papers! Below is a table of wonderful papers 17 | for you to gather inspiration from 🚀 18 |

19 | 20 | 24 | Submit a Paper 25 | 33 | 37 | 38 | 39 |
40 | 41 | 42 |
43 | { 44 | papers.map((paper) => { 45 | return ( 46 |
47 | {paper.link === undefined ? ( 48 |

`${paper.title}`

49 | ) : ( 50 |

51 | {paper.title} 52 |

53 | )} 54 | 55 |
56 |
57 |

58 | {paper.authors} 59 |

60 |

61 | {paper.journal} 62 |

63 |
64 |
65 | 66 |

67 | 73 | 74 | 75 | 76 | {paper["primary-field"]} 77 | {paper["secondary-field"] != "None Selected" && ( 78 | 79 | 80 | {paper["secondary-field"]} 81 | 82 | )} 83 |

84 | 85 |

86 | 92 | 97 | 98 | 99 | {paper["best-part"]} 100 | {paper["second-best-part"] != "None Selected" && ( 101 | 102 | 103 | {paper["second-best-part"]} 104 | 105 | )} 106 |

107 | 108 |

109 | 115 | 120 | 121 | 122 | {paper.about} 123 |

124 |
125 | ) 126 | }) 127 | } 128 |
129 |
130 | -------------------------------------------------------------------------------- /src/pages/index.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import BaseLayout from "../layouts/BaseLayout.astro"; 3 | 4 | let fields = ["None Selected", "Econometrics", "Health", "Labor", "Development", "History", "Trade", "Urban", "Crime", "Environmental", "IO", "Education", "Public Economics", "Theory", "Finance", "Macro"] 5 | 6 | let paper_parts = ["None Selected", "Introduction", "Motivation", "Literature Review", "Data", "Empirical Strategy", "Motivation", "Results", "Conclusion", "Theory"] 7 | --- 8 | 9 | 10 | 11 |
12 |

Great Economics Writing

13 |

14 | We need your help making a crowd-sourced collection of great economics 15 | writing. Our goal is to gather 100 great papers across fields and 16 | across parts of the paper (beautiful intro; clear methodology; thorough 17 | results; etc.). 18 |

19 | 20 | 22 | View Results 23 | 25 | 27 | 28 | 29 |
30 | 31 | 32 |
34 | 35 |

Submit a Paper

36 | 37 | 38 |
39 |
40 |

Paper 41 | Information

42 |

Give the details of the paper 43 |

44 |
45 |
46 |
47 |
48 | 51 | 53 |
54 | 55 |
56 | 59 | 61 |
62 | 63 |
64 | 68 | 70 |
71 | 72 |
73 | 77 | 79 |
80 | 81 |
82 | 86 | 91 |
92 | 93 |
94 | 98 | 103 |
104 | 105 |
106 |
107 |
108 | 109 | 110 |
111 |
112 |

What makes the 113 | writing great?

114 |

Tell us what you really love 115 | about the paper 116 |

117 |
118 |
119 |
120 |
121 | 125 | 130 |
131 | 132 |
133 | 137 | 142 |
143 | 144 |
145 | 148 |
149 |