diff --git a/reviewboard/staticbundles.py b/reviewboard/staticbundles.py
new file mode 100644
index 0000000000000000000000000000000000000000..5136466e99cf47b2c3ded19c0aa7826c11553b6e
--- /dev/null
+++ b/reviewboard/staticbundles.py
@@ -0,0 +1,284 @@
+from djblets.settings import (PIPELINE_JS as DJBLETS_PIPELINE_JS,
+                              PIPELINE_CSS as DJBLETS_PIPELINE_CSS)
+
+
+# Media compression
+PIPELINE_JS = dict({
+    '3rdparty': {
+        'source_filenames': (
+            'lib/js/flot/jquery.flot.min.js',
+            'lib/js/flot/jquery.flot.pie.min.js',
+            'lib/js/flot/jquery.flot.selection.min.js',
+            'lib/js/flot/jquery.flot.time.min.js',
+            'lib/js/underscore-1.4.4.min.js',
+            'lib/js/backbone-1.0.0.min.js',
+            'lib/js/jquery.cookie-1.3.1.js',
+            'lib/js/jquery.form.js',
+            'lib/js/jquery.timesince.js',
+            'lib/js/moment-2.0.0.min.js',
+            'lib/js/retina.js',
+            'lib/js/ui.autocomplete.js',
+            'lib/js/google-code-prettify/prettify.js',
+            'lib/js/marked.js',
+            'lib/js/codemirror-3.19.min.js',
+        ),
+        'output_filename': 'lib/js/3rdparty.min.js',
+    },
+    'js-tests': {
+        'source_filenames': (
+            'lib/js/jasmine-1.3.1.js',
+            'lib/js/jasmine-html-1.3.1.js',
+            'rb/js/collections/tests/resourceCollectionTests.js',
+            'rb/js/diffviewer/models/tests/diffFileModelTests.js',
+            'rb/js/diffviewer/models/tests/diffReviewableModelTests.js',
+            'rb/js/diffviewer/models/tests/diffRevisionModelTests.js',
+            'rb/js/diffviewer/models/tests/paginationModelTests.js',
+            'rb/js/diffviewer/views/tests/diffReviewableViewTests.js',
+            'rb/js/models/tests/commentEditorModelTests.js',
+            'rb/js/models/tests/reviewReplyEditorModelTests.js',
+            'rb/js/models/tests/reviewRequestEditorModelTests.js',
+            'rb/js/models/tests/userSessionModelTests.js',
+            'rb/js/newReviewRequest/views/tests/branchesViewTests.js',
+            'rb/js/newReviewRequest/views/tests/postCommitViewTests.js',
+            'rb/js/newReviewRequest/views/tests/repositorySelectionViewTests.js',
+            'rb/js/pages/models/tests/pageManagerModelTests.js',
+            'rb/js/pages/views/tests/reviewablePageViewTests.js',
+            'rb/js/resources/collections/tests/repositoryBranchesCollectionTests.js',
+            'rb/js/resources/collections/tests/repositoryCommitsCollectionTests.js',
+            'rb/js/resources/models/tests/baseCommentModelTests.js',
+            'rb/js/resources/models/tests/baseCommentReplyModelTests.js',
+            'rb/js/resources/models/tests/baseResourceModelTests.js',
+            'rb/js/resources/models/tests/diffCommentModelTests.js',
+            'rb/js/resources/models/tests/draftReviewModelTests.js',
+            'rb/js/resources/models/tests/draftReviewRequestModelTests.js',
+            'rb/js/resources/models/tests/fileAttachmentModelTests.js',
+            'rb/js/resources/models/tests/fileAttachmentCommentModelTests.js',
+            'rb/js/resources/models/tests/fileDiffModelTests.js',
+            'rb/js/resources/models/tests/screenshotModelTests.js',
+            'rb/js/resources/models/tests/screenshotCommentModelTests.js',
+            'rb/js/resources/models/tests/repositoryBranchModelTests.js',
+            'rb/js/resources/models/tests/repositoryCommitModelTests.js',
+            'rb/js/resources/models/tests/reviewGroupModelTests.js',
+            'rb/js/resources/models/tests/reviewModelTests.js',
+            'rb/js/resources/models/tests/reviewReplyModelTests.js',
+            'rb/js/resources/models/tests/reviewRequestModelTests.js',
+            'rb/js/resources/models/tests/validateDiffModelTests.js',
+            'rb/js/utils/tests/keyBindingUtilsTests.js',
+            'rb/js/utils/tests/linkifyUtilsTests.js',
+            'rb/js/utils/tests/propertyUtilsTests.js',
+            'rb/js/utils/tests/textUtilsTests.js',
+            'rb/js/views/tests/collectionViewTests.js',
+            'rb/js/views/tests/commentDialogViewTests.js',
+            'rb/js/views/tests/commentIssueBarViewTests.js',
+            'rb/js/views/tests/diffFragmentQueueViewTests.js',
+            'rb/js/views/tests/draftReviewBannerViewTests.js',
+            'rb/js/views/tests/fileAttachmentThumbnailViewTests.js',
+            'rb/js/views/tests/reviewBoxViewTests.js',
+            'rb/js/views/tests/reviewBoxListViewTests.js',
+            'rb/js/views/tests/reviewDialogViewTests.js',
+            'rb/js/views/tests/reviewRequestEditorViewTests.js',
+            'rb/js/views/tests/reviewReplyDraftBannerViewTests.js',
+            'rb/js/views/tests/reviewReplyEditorViewTests.js',
+            'rb/js/views/tests/screenshotThumbnailViewTests.js',
+        ),
+        'output_filename': 'rb/js/js-tests.min.js',
+    },
+    'common': {
+        'source_filenames': (
+            'rb/js/utils/backboneUtils.js',
+            'rb/js/utils/compatUtils.js',
+            'rb/js/utils/consoleUtils.js',
+            'rb/js/utils/propertyUtils.js',
+            'rb/js/utils/underscoreUtils.js',
+            'rb/js/common.js',
+            'rb/js/utils/apiErrors.js',
+            'rb/js/utils/apiUtils.js',
+            'rb/js/utils/linkifyUtils.js',
+            'rb/js/utils/keyBindingUtils.js',
+            'rb/js/collections/baseCollection.js',
+            'rb/js/extensions/models/aliases.js',
+            'rb/js/extensions/models/commentDialogHookModel.js',
+            'rb/js/extensions/models/reviewDialogCommentHookModel.js',
+            'rb/js/pages/models/pageManagerModel.js',
+            'rb/js/resources/models/baseResourceModel.js',
+            'rb/js/resources/models/draftResourceModelMixin.js',
+            'rb/js/resources/models/draftReviewRequestModel.js',
+            'rb/js/resources/models/reviewModel.js',
+            'rb/js/resources/models/draftReviewModel.js',
+            'rb/js/resources/models/baseCommentModel.js',
+            'rb/js/resources/models/baseCommentReplyModel.js',
+            'rb/js/resources/models/diffCommentModel.js',
+            'rb/js/resources/models/diffCommentReplyModel.js',
+            'rb/js/resources/models/diffModel.js',
+            'rb/js/resources/models/fileAttachmentModel.js',
+            'rb/js/resources/models/fileAttachmentCommentModel.js',
+            'rb/js/resources/models/fileAttachmentCommentReplyModel.js',
+            'rb/js/resources/models/fileDiffModel.js',
+            'rb/js/resources/models/reviewGroupModel.js',
+            'rb/js/resources/models/reviewReplyModel.js',
+            'rb/js/resources/models/reviewRequestModel.js',
+            'rb/js/resources/models/screenshotModel.js',
+            'rb/js/resources/models/screenshotCommentModel.js',
+            'rb/js/resources/models/screenshotCommentReplyModel.js',
+            'rb/js/resources/collections/resourceCollection.js',
+            'rb/js/models/userSessionModel.js',
+        ),
+        'output_filename': 'rb/js/base.min.js',
+    },
+    'reviews': {
+        'source_filenames': (
+            # Note: These are roughly in dependency order.
+            'rb/js/models/abstractCommentBlockModel.js',
+            'rb/js/models/abstractReviewableModel.js',
+            'rb/js/models/commentEditorModel.js',
+            'rb/js/models/commentIssueManagerModel.js',
+            'rb/js/models/fileAttachmentCommentBlockModel.js',
+            'rb/js/models/fileAttachmentReviewableModel.js',
+            'rb/js/models/regionCommentBlockModel.js',
+            'rb/js/models/reviewReplyEditorModel.js',
+            'rb/js/models/reviewRequestEditorModel.js',
+            'rb/js/models/imageReviewableModel.js',
+            'rb/js/models/screenshotCommentBlockModel.js',
+            'rb/js/models/screenshotReviewableModel.js',
+            'rb/js/models/textBasedCommentBlockModel.js',
+            'rb/js/models/textBasedReviewableModel.js',
+            'rb/js/models/markdownReviewableModel.js',
+            'rb/js/pages/models/diffViewerPageModel.js',
+            'rb/js/pages/views/reviewablePageView.js',
+            'rb/js/pages/views/reviewRequestPageView.js',
+            'rb/js/pages/views/diffViewerPageView.js',
+            'rb/js/utils/textUtils.js',
+            'rb/js/views/abstractCommentBlockView.js',
+            'rb/js/views/abstractReviewableView.js',
+            'rb/js/views/collapsableBoxView.js',
+            'rb/js/views/commentDialogView.js',
+            'rb/js/views/commentIssueBarView.js',
+            'rb/js/views/diffFragmentQueueView.js',
+            'rb/js/views/dndUploaderView.js',
+            'rb/js/views/draftReviewBannerView.js',
+            'rb/js/views/fileAttachmentCommentBlockView.js',
+            'rb/js/views/fileAttachmentReviewableView.js',
+            'rb/js/views/fileAttachmentThumbnailView.js',
+            'rb/js/views/floatingBannerView.js',
+            'rb/js/views/issueSummaryTableView.js',
+            'rb/js/views/markdownEditorView.js',
+            'rb/js/views/regionCommentBlockView.js',
+            'rb/js/views/reviewBoxListView.js',
+            'rb/js/views/reviewBoxView.js',
+            'rb/js/views/reviewDialogView.js',
+            'rb/js/views/reviewReplyDraftBannerView.js',
+            'rb/js/views/reviewReplyEditorView.js',
+            'rb/js/views/reviewRequestEditorView.js',
+            'rb/js/views/screenshotThumbnailView.js',
+            'rb/js/views/imageReviewableView.js',
+            'rb/js/views/textBasedCommentBlockView.js',
+            'rb/js/views/textBasedReviewableView.js',
+            'rb/js/views/markdownReviewableView.js',
+            'rb/js/diffviewer/models/diffCommentBlockModel.js',
+            'rb/js/diffviewer/models/diffCommentsHintModel.js',
+            'rb/js/diffviewer/models/diffFileModel.js',
+            'rb/js/diffviewer/models/diffReviewableModel.js',
+            'rb/js/diffviewer/models/diffRevisionModel.js',
+            'rb/js/diffviewer/models/paginationModel.js',
+            'rb/js/diffviewer/collections/diffFileCollection.js',
+            'rb/js/diffviewer/views/chunkHighlighterView.js',
+            'rb/js/diffviewer/views/diffCommentBlockView.js',
+            'rb/js/diffviewer/views/diffCommentsHintView.js',
+            'rb/js/diffviewer/views/diffFileIndexView.js',
+            'rb/js/diffviewer/views/diffReviewableView.js',
+            'rb/js/diffviewer/views/diffRevisionLabelView.js',
+            'rb/js/diffviewer/views/diffRevisionSelectorView.js',
+            'rb/js/diffviewer/views/paginationView.js',
+            'rb/js/diffviewer.js',
+            'rb/js/reviews.js',
+        ),
+        'output_filename': 'rb/js/reviews.min.js',
+    },
+    'newReviewRequest': {
+        'source_filenames': (
+            # Note: These are roughly in dependency order.
+            'rb/js/resources/models/repositoryBranchModel.js',
+            'rb/js/resources/models/repositoryCommitModel.js',
+            'rb/js/resources/collections/repositoryBranchesCollection.js',
+            'rb/js/resources/collections/repositoryCommitsCollection.js',
+            'rb/js/resources/models/repositoryModel.js',
+            'rb/js/resources/models/validateDiffModel.js',
+            'rb/js/newReviewRequest/models/postCommitModel.js',
+            'rb/js/newReviewRequest/models/preCommitModel.js',
+            'rb/js/newReviewRequest/models/newReviewRequestModel.js',
+            'rb/js/views/collectionView.js',
+            'rb/js/newReviewRequest/views/branchView.js',
+            'rb/js/newReviewRequest/views/branchesView.js',
+            'rb/js/newReviewRequest/views/commitView.js',
+            'rb/js/newReviewRequest/views/commitsView.js',
+            'rb/js/newReviewRequest/views/repositoryView.js',
+            'rb/js/newReviewRequest/views/repositorySelectionView.js',
+            'rb/js/newReviewRequest/views/postCommitView.js',
+            'rb/js/newReviewRequest/views/preCommitView.js',
+            'rb/js/newReviewRequest/views/newReviewRequestView.js',
+        ),
+        'output_filename': 'rb/js/newReviewRequest.min.js',
+    },
+    'admin': {
+        'source_filenames': (
+            'lib/js/jquery.masonry.js',
+            'rb/js/admin.js',
+        ),
+        'output_filename': 'rb/js/admin.min.js',
+    },
+    'repositoryform': {
+        'source_filenames': (
+            'rb/js/repositoryform.js',
+        ),
+        'output_filename': 'rb/js/repositoryform.min.js',
+    },
+}, **DJBLETS_PIPELINE_JS)
+
+
+PIPELINE_CSS = dict({
+    'common': {
+        'source_filenames': (
+            'lib/css/codemirror.css',
+            'lib/css/jquery-ui-1.8.24.min.css',
+            'rb/css/common.less',
+            'rb/css/dashboard.less',
+            'rb/css/icons.less',
+            'rb/css/search.less',
+        ),
+        'output_filename': 'rb/css/common.min.css',
+        'absolute_paths': False,
+    },
+    'js-tests': {
+        'source_filenames': (
+            'rb/css/js-tests.less',
+        ),
+        'output_filename': 'rb/css/js-tests.min.css',
+        'absolute_paths': False,
+    },
+    'reviews': {
+        'source_filenames': (
+            'rb/css/diffviewer.less',
+            'rb/css/dndUploader.less',
+            'rb/css/image-review-ui.less',
+            'rb/css/reviews.less',
+            'rb/css/syntax.css',
+        ),
+        'output_filename': 'rb/css/reviews.min.css',
+        'absolute_paths': False,
+    },
+    'newReviewRequest': {
+        'source_filenames': (
+            'rb/css/newReviewRequest.less',
+        ),
+        'output_filename': 'rb/css/newReviewRequest.min.css',
+        'absolute_paths': False,
+    },
+    'admin': {
+        'source_filenames': (
+            'rb/css/admin.less',
+            'rb/css/admin-dashboard.less',
+        ),
+        'output_filename': 'rb/css/admin.min.css',
+        'absolute_paths': False,
+    },
+}, **DJBLETS_PIPELINE_CSS)
