diff --git a/appview/pages/templates/search/search.html b/appview/pages/templates/search/search.html
new file mode 100644
index 00000000..6ba9d248
--- /dev/null
+++ b/appview/pages/templates/search/search.html
@@ -0,0 +1,176 @@
+{{ define "title" }}Search{{ end }}
+
+{{ define "content" }}
+
Search
+
+
+
+ {{ template "searchBar" . }}
+ {{ template "searchResults" . }}
+
+
+
+ {{ template "searchOptionsPanel" . }}
+
+
+{{ end }}
+
+{{ define "searchBar" }}
+
+
+
+
+ {{ template "languageFilters" . }}
+
+
+{{ end }}
+
+{{ define "searchResults" }}
+
+ {{ range .Repos }}
+
+ {{ template "user/fragments/repoCard" (list $ . true) }}
+
+ {{ else }}
+
+ No repos found.
+
+ {{ end }}
+
+
+
+ {{ template "searchStatistics" . }}
+
+
+ {{if gt .ResultCount .Page.Limit }}
+ {{ template "fragments/pagination" (dict
+ "Page" .Page
+ "TotalCount" .ResultCount
+ "BasePath" "search"
+ "QueryParams" (queryParams "q" .FilterQuery "sort" .SortParam)
+ ) }}
+ {{ end }}
+{{ end }}
+
+{{ define "searchOptionsPanel" }}
+
+
+
+ Sort by
+
+ {{ template "sortOptionsList" . }}
+
+
+
+
+ Languages
+
+ {{ template "languageFilters" . }}
+
+
+ {{ template "searchStatistics" . }}
+
+{{ end }}
+
+{{ define "sortOptionsList" }}
+ {{ $currentQuery := .FilterQuery }}
+
+{{ end }}
+
+{{ define "languageFilters" }}
+ {{ $commonLanguages := list "Go" "JavaScript" "TypeScript" "Python" "Rust" "OCaml" "Haskell" "C" "C++" "Ruby" "Swift" }}
+
+
+ {{ range $commonLanguages }}
+ {{ $lang := . }}
+ {{ template "languageFilterChip" (dict "Language" $lang "CurrentQuery" $.FilterQuery) }}
+ {{ end }}
+
+
+
+ Click a language to filter results. You can also filter by language by
+ adding language:name to the search bar.
+
+{{ end }}
+
+{{ define "languageFilterChip" }}
+ {{ $lang := .Language }}
+ {{ $currentQuery := .CurrentQuery }}
+ {{ $langColor := langColor $lang }}
+ {{ $newQuery := queryParams "q" (printf "language:%s %s" $lang $currentQuery) }}
+
+
+ {{ template "repo/fragments/colorBall" (dict "color" $langColor) }}
+ {{ $lang }}
+
+{{ end }}
+
+{{ define "searchStatistics" }}
+ {{ if gt .ResultCount 0 }}
+
+ Returned {{ .ResultCount }} of {{ .DocCount }} repos in {{ .TimeTaken }}
+
+ {{ end }}
+{{ end }}
+
+